想要将索引列表构建到二维 bool_ 数组中,其中 True。
import numpy
arr = numpy.zeros((6,6), numpy.bool_)
arr[2,3] = True
arr[5,1] = True
results1 = [[(x,y) for (y,cell) in enumerate(arr[x].flat) if cell] for x in xrange(6)]
results2 = [(x,y) for (y,cell) in enumerate(arr[x].flat) if cell for x in xrange(6)]
结果1:
[[], [], [(2, 3)], [], [], [(5, 1)]]
结果2完全错误
目标:
[(2, 3),(5, 1)]
有什么方法可以在不展平列表的情况下做到这一点,或者有什么更好的方法来做到这一点?
最佳答案
我认为您正在寻找的功能是 numpy.where 。这是一个例子:
>>> import numpy
>>> arr = numpy.zeros((6,6), numpy.bool_)
>>> arr[2,3] = True
>>> arr[5,1] = True
>>> numpy.where(arr)
(array([2, 5]), array([3, 1]))
您可以将其重新转换为索引,如下所示:
>>> numpy.array(numpy.where(arr)).T
array([[2, 3],
[5, 1]])
关于Python Numpy 二维数组迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8125593/