为什么np.where不返回期望值

时间:2019-10-15 04:42:22

标签: python numpy

初始化代码

arr = np.zeros((2,2,2,2))

我的输入数组是

[[[[0.5, 1. ],
     [0.6, 2. ]],

    [[0. , 0. ],
     [0. , 0. ]]],


   [[[0. , 0. ],
     [0. , 0. ]],

    [[0. , 0. ],
     [0. , 0. ]]]]

命令

np.where(arr > 0)  

输出

(array([0, 0, 0, 0]),
 array([0, 0, 0, 0]),
 array([0, 0, 1, 1]),
 array([0, 1, 0, 1]))

元组的大小
状态_0 *状态_1 *操作*新状态_1 *新状态_2

问题

  1. 为什么上述元组中的最后一个值不是 arr [0,0,1,0]
  2. 如何查找值大于零的new_state?

1 个答案:

答案 0 :(得分:4)

结果正确,您只是在阅读错误。第一行中的每个数字代表结果的第一个索引。第二行代表第二个索引。所以,

(array([0, 0, 0, 0]),
 array([0, 0, 0, 0]),
 array([0, 0, 1, 1]),
 array([0, 1, 0, 1]))

对应于arr [0,0,0,0],arr [0,0,0,1]等处的点。

如果结果不是正方形,您可能会不太困惑。尝试以下示例:

np.where(arr==0)
(array([0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int64), 
array([1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1], dtype=int64), 
array([0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], dtype=int64), 
array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], dtype=int64))

如您所见,这些行不能对应一个单元的位置。