函数“ where”如何生成此数组?

时间:2019-02-02 00:39:20

标签: python numpy

>>> x = np.arange(9.).reshape(3, 3)
>>> np.where( x > 5 )
(array([2, 2, 2]), array([0, 1, 2]))

x>5的确切含义是什么?结果数组似乎很神秘。

2 个答案:

答案 0 :(得分:1)

这是具有行和列索引的元组。 x > 5返回形状与x相同的布尔数组,其元素设置为True,其中满足条件,而False则满足。根据{{​​3}},np.where在没有其他参数的情况下将在the documentation上进行回退。对于您给定的示例,大于5的所有元素碰巧都位于行2中,并且所有列均满足条件,因此[2, 2, 2] (rows), [0, 1, 2] (columns)。请注意,可以使用这个结果以指数的原始数组:

>>> x[np.where(x > 5)]
[6 7 8]

答案 1 :(得分:0)

通常的语法是np.where(condition, res_if_true, res_if_false)。由于只有第一个参数,这是一种特殊情况described in the docs

  

仅提供条件时,此功能是   np.asarray(condition).nonzero()

因此,首先计算x > 5

arr = x > 5
print(arr)
# array([[False, False, False],
#        [False, False, False],
#        [ True,  True,  True]])

由于它已经阵列,计算arr.nonzero()

print(arr.nonzero())
# (array([2, 2, 2], dtype=int64), array([0, 1, 2], dtype=int64))

这将返回非零元素的索引。元组的第一个元素代表axis=0的坐标,第二个元素axis=1的坐标,即第二行和最后一行中的所有值均大于5。