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),)