结果为.nonzero()的索引数组

时间:2020-10-21 09:22:14

标签: python numpy

在Numpy中使用两个条件选择行时遇到困难。以下代码未返回预期的输出

tot_length=0.3
steps=0.1
start_val=0.0
list_no =np.arange(start_val, tot_length, steps)
x, y, z = np.meshgrid(*[list_no for _ in range(3)], sparse=True)
a = ((x>=y) & (y>=z)).nonzero() # this maybe the problem

输出

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

而预期的输出

[[0.  0.  0. ]
 [0.1 0.  0. ]
 [0.1 0.1 0. ]
 [0.1 0.1 0.1]
 [0.2 0.  0. ]
 [0.2 0.1 0. ]
 [0.2 0.1 0.1]
 [0.2 0.2 0. ]
 [0.2 0.2 0.1]
 [0.2 0.2 0.2]]

1 个答案:

答案 0 :(得分:0)

ndarray.nonzero以及np.where返回索引数组的元组。这使得将这些索引解压缩到单独的数组中,然后可以将其用于沿给定轴进行索引。将它们堆叠成2D数组是微不足道的,只需构建一个新数组并将其转置为:

ix = np.array(((x>=y) & (y>=z)).nonzero()).T

然后,您可以轻松地使用索引数组将list_no索引为:

list_no[ix]
array([[0. , 0. , 0. ],
       [0. , 0.1, 0. ],
       [0. , 0.2, 0. ],
       [0.1, 0.1, 0. ],
       [0.1, 0.1, 0.1],
       [0.1, 0.2, 0. ],
       [0.1, 0.2, 0.1],
       [0.2, 0.2, 0. ],
       [0.2, 0.2, 0.1],
       [0.2, 0.2, 0.2]])
相关问题