Получить элементы NumPy массива A, где индексы строк равны строкам в массиве B, которые удовлетворяют условию - PullRequest
0 голосов
/ 29 марта 2020

Если у меня есть два массива 1D NumPy

a = array([1, 1, 0, 1, 0, 0, 0, 1, 0])
b = array([0, 0, 1, 1, 1, 0, 1, 0, 1])

, как я могу получить элементы b, которые имеют одинаковые индексы строк, где a == 1 истинно (то есть [0, 0, 1 , 0] при индексах 0, 1, 3 и 7)?

Ответы [ 2 ]

0 голосов
/ 29 марта 2020
In [134]: a = np.array([1, 1, 0, 1, 0, 0, 0, 1, 0]) 
     ...: b = np.array([0, 0, 1, 1, 1, 0, 1, 0, 1])  

Элементы True a:

In [135]: a==1                                                                                 
Out[135]: array([ True,  True, False,  True, False, False, False,  True, False])

, которые можно использовать в качестве логического массива для индексации b:

In [136]: b[a==1]                                                                              
Out[136]: array([0, 0, 1, 0])

индексов, отличных от нуля значения (он же np.where):

In [137]: np.nonzero(a)                                                                        
Out[137]: (array([0, 1, 3, 7]),)

, который кортеж индекса можно использовать для индексации b (не нужно использовать [0] в других ответах):

In [138]: b[np.nonzero(a)]                                                                     
Out[138]: array([0, 0, 1, 0])
0 голосов
/ 29 марта 2020

Используйте np.where для получения значений индекса.

Попробуйте:

idx = np.where(a == 1)[0]
print(b[idx])

Выход:

array([0, 0, 1, 0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...