numpy.where()详细的逐步说明/示例


Answers:


271

摆弄了一段时间后,我发现了问题,并将它们发布在这里,希望对其他人有所帮助。

直观地,np.where就像问“ 告诉我这个数组中的位置满足给定条件 ”。

>>> a = np.arange(5,10)
>>> np.where(a < 8)       # tell me where in a, entries are < 8
(array([0, 1, 2]),)       # answer: entries indexed by 0, 1, 2

它也可以用于获取满足条件的数组中的条目:

>>> a[np.where(a < 8)] 
array([5, 6, 7])          # selects from a entries 0, 1, 2

a是2d数组时,np.where()返回行idx的数组和col idx的数组:

>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
       [7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))

与1d情况一样,我们可以np.where()用来获取2d数组中满足条件的条目:

>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2

数组([9])


注意,当a为1d时,np.where()仍返回行idx的数组和col idx的数组,但是列的长度为1,因此后者为空数组。


10
我一直在努力地理解在2d上使用np.where的过程,直到找到答案“当a是2d数组时,np.where()返回行IDX的数组和col IDX的数组:”。感谢那。
bencampbell_17年

1
在阅读了三遍文档之后,我仍然感到非常愚蠢,但仍然没有解决难题np.where(2d_array),感谢您解决此问题!您应该接受自己的答案。e:哦,它关了。好吧,这不应该是
smcs

5
可惜这关门了。但是,我想np.where为这个否则完整的答案添加另一个功能。该函数还可以根据条件从x和y数组中选择元素。此评论中的空间有限,但请参阅:np.where(np.array([[False,False,True], [True,False,False]]), np.array([[8,2,6], [9,5,0]]), np.array([[4,8,7], [3,2,1]]))将返回array([[4, 8, 6], [9, 2, 1]])。请注意,x和y的哪些元素是根据对/

该答案给出的解释只是np.where的特例。根据文档,仅当condition提供时,此功能是的简写 np.asarray(condition).nonzero()
莱尼

19

这里有点有趣。我发现NumPy通常会完全按照我的意愿去做-有时候,我尝试一些事情比阅读文档要快。实际上两者都是最好的。

我认为您的回答很好(如果愿意,可以接受)。这仅仅是“额外”。

import numpy as np

a = np.arange(4,10).reshape(2,3)

wh = np.where(a>7)
gt = a>7
x  = np.where(gt)

print "wh: ", wh
print "gt: ", gt
print "x:  ", x

给出:

wh:  (array([1, 1]), array([1, 2]))
gt:  [[False False False]
      [False  True  True]]
x:   (array([1, 1]), array([1, 2]))

...但是:

print "a[wh]: ", a[wh]
print "a[gt]  ", a[gt]
print "a[x]:  ", a[x]

给出:

a[wh]:  [8 9]
a[gt]   [8 9]
a[x]:   [8 9]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.