Where ()详细的、逐步的解释/示例

尽管读了 医生这篇文章另一个职位,我还是很难正确理解 numpy.where()

能否有人提供一步一步的1D 和2D 数组注释示例?

202235 次浏览

在闲逛了一会儿之后,我想明白了一些事情,并把它们贴在这里,希望能帮助到其他人。

凭直觉,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.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]