Как использовать np.arwhere с несколькими условиями? - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу выбрать индексы 1,2,3,12 и 13 с np.argwhere или np.where. В обоих случаях следующий код не работает.Есть ли способ сделать это с помощью этих двух команд, или я должен использовать его дважды вместо оператора &?

`a= np.array([1,2,3,4,10,12,13])
b = np.argwhere((a<4) & (a>10))
c = np.where((a<4) & (a>10))
print(b)
print(c)`

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019
In [31]: a= np.array([1,2,3,4,10,12,13])                                        
In [32]: a                                                                      
Out[32]: array([ 1,  2,  3,  4, 10, 12, 13])

2 условия по отдельности:

In [33]: a<4                                                                    
Out[33]: array([ True,  True,  True, False, False, False, False])
In [34]: a>10                                                                   
Out[34]: array([False, False, False, False, False,  True,  True])

Соедините их с помощью логического или:

In [35]: (a<4) | (a>10)                                                         
Out[35]: array([ True,  True,  True, False, False,  True,  True])

where - кортеж (размер 1, потому что есть 1 измерение):

In [36]: np.where((a<4) | (a>10))                                               
Out[36]: (array([0, 1, 2, 5, 6]),)

Этот кортеж можно использовать непосредственно для индексации a:

In [37]: a[_]                                                                   
Out[37]: array([ 1,  2,  3, 12, 13])

argwhere дает те же индексы, но в «вертикальном» формате:

In [38]: np.argwhere((a<4) | (a>10))                                            
Out[38]: 
array([[0],
       [1],
       [2],
       [5],
       [6]])

Это может быть проще для визуализации, но не очень полезно для индексации (если вы не делаете это итеративно).

С логическим и, результатом является пустой индекс - никакое значение не удовлетворяет обоим условиям:

In [39]: np.where((a<4) & (a>10))                                               
Out[39]: (array([], dtype=int64),)
0 голосов
/ 23 февраля 2019

Вы можете использовать np.where:

c = np.where((a < 4) & (a > 10),a, a)
c
array([ 1,  2,  3,  4, 10, 12, 13])
...