numpy.where返回结果存疑:为何示例输出是这样?
理解
np.where(condition)的返回值 别担心,这个问题其实挺常见的,我来给你一步步解释清楚~
首先要明确:当np.where只传入一个条件参数(没有后续的x和y参数)时,它的作用是找出数组中所有满足条件的元素的索引位置,返回的是一个元组,元组里的每个数组对应原数组的一个维度的索引值。
我们结合你的例子来看:
你的数组x是一个3×3的二维数组:
>>> x = np.arange(9.).reshape(3, 3) >>> x array([[ 0., 1., 2.], [ 3., 4., 5.], [ 6., 7., 8.]])
首先找出满足x > 5的元素:它们是第三行(数组索引从0开始,所以行号为2)的6、7、8,对应的位置分别是:
- (2, 0):行索引2,列索引0
- (2, 1):行索引2,列索引1
- (2, 2):行索引2,列索引2
np.where会把这些位置的行索引和列索引分别收集成两个数组:
- 所有满足条件元素的行索引都是2,所以第一个数组是
array([2, 2, 2]) - 对应的列索引依次是0、1、2,所以第二个数组是
array([0, 1, 2])
你可以通过以下代码验证这个结果:
>>> x[np.where(x > 5)] array([6., 7., 8.])
这会直接返回所有满足条件的元素,也能反向印证索引的正确性。
如果是更高维度的数组(比如3维),np.where会返回对应维度数量的索引数组,原理完全一致。
内容的提问来源于stack exchange,提问作者Invariance
相关产品推荐
相关产品推荐

