Answers:
摆弄了一段时间后,我发现了问题,并将它们发布在这里,希望对其他人有所帮助。
直观地,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,因此后者为空数组。
np.where(2d_array)
,感谢您解决此问题!您应该接受自己的答案。e:哦,它关了。好吧,这不应该是
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的哪些元素是根据对/
condition
提供时,此功能是的简写 np.asarray(condition).nonzero()
。
这里有点有趣。我发现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]