尽管读了 医生,这篇文章和 另一个职位,我还是很难正确理解 numpy.where()。
numpy.where()
能否有人提供一步一步的1D 和2D 数组注释示例?
在闲逛了一会儿之后,我想明白了一些事情,并把它们贴在这里,希望能帮助到其他人。
凭直觉,np.where就像是在问“ 告诉我这个数组中的哪些条目满足给定的条件”。
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 行数组和一个 colidx 行数组:
a
np.where()
>>> 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
Array ([9])
注意,当 a为1d 时,np.where()仍然返回一个行 idx 的数组和一个 colidx 的数组,但是列的长度为1,因此后者为空数组。
这里有更多的乐趣。我发现 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]