numpy.where() 详细的分步说明/示例 [关闭]

Posted

技术标签:

【中文标题】numpy.where() 详细的分步说明/示例 [关闭]【英文标题】:numpy.where() detailed, step-by-step explanation / examples [closed] 【发布时间】:2016-04-12 13:25:46 【问题描述】:

尽管阅读了the doc、this post 和this other post,但我无法正确理解numpy.where()

有人可以提供一维和二维数组的分步注释示例吗?

【问题讨论】:

【参考方案1】:

折腾了一段时间后,我想通了,并在这里发布它们,希望对其他人有所帮助。

直观地说,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 是一个二维数组时,np.where() 返回一个由row 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))

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

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

数组([9])


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

【讨论】:

在 2d 上使用时,我一直在努力理解 np.where,直到我找到你的答案“当 a 是 2d 数组时,np.where() 返回一个行 idx 数组和一个 col 数组idx 的:"。谢谢你。 我在阅读文档三遍后仍然无法解决难题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 的哪些元素 这个答案给出的解释只是np.where的一个特例。根据文档,当仅提供condition 时,此函数是np.asarray(condition).nonzero() 的简写。【参考方案2】:

这里更有趣一点。我发现 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]

【讨论】:

***.com/questions/52649568/use-of-np-where0

以上是关于numpy.where() 详细的分步说明/示例 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

puppet完整模块实例分步解读

numpy.where和numpy.piecewise的用法

几种播放音频文件的方式(十三) —— OpenAL框架之分步解析

如何反转 numpy.where (np.where) 函数

numpy高级函数:where与extract

Pandas 掩码 / where 方法与 NumPy np.where