Развернуть массив NumPy на основе значения в другом массиве - PullRequest
2 голосов
/ 08 ноября 2019

У меня есть следующий массив NumPy a = np.array([1,1,2,1,3]), который должен быть преобразован в следующий массив b = np.array([1,1,1,1,1,1,1,1]).

В результате получается, что все не 1 значения в aмассив должен быть расширен в массиве b до его кратного, определенного в массиве a. Проще говоря, 2 должно стать 2 единиц , а 3 должно стать 3 единиц .

Честно говоря, я не смог найти функцию numpyэто делает это, но я уверен, что один существует. Любой совет будет очень кстати! Спасибо!

Ответы [ 3 ]

2 голосов
/ 08 ноября 2019

Мы можем просто сделать -

np.ones(a.sum(),dtype=int)

Это будет соответствовать всем числам: 1s и не- 1s из-за суммирования и, следовательно, даст нам желаемый результат.

1 голос
/ 08 ноября 2019
In [71]: np.ones(len(a),int).repeat(a)                                          
Out[71]: array([1, 1, 1, 1, 1, 1, 1, 1])

Для этого небольшого примера он быстрее, чем np.ones(a.sum(),int), но не так хорошо масштабируется. Но в целом оба быстры.

0 голосов
/ 08 ноября 2019

Вот один из возможных способов, основанный на числе, которое вы хотите повторить:

In [12]: a = np.array([1,1,2,1,3])
In [13]: mask = a != 1
In [14]: np.concatenate((a[~mask], np.repeat(1, np.prod(a[mask]))))
Out[14]: array([1, 1, 1, 1, 1, 1, 1, 1, 1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...