想要建立一个二维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)]
如果不事先将列表弄平,或者通常更好的方法来执行此操作,是否可以这样做?
答案 0 :(得分: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]])
答案 1 :(得分:0)
>>> import numpy as np
>>> arr = np.zeros((6,6), np.bool_)
>>> arr[2,3] = True
>>> arr[5,1] = True
>>> np.argwhere(arr)
array([[2, 3],
[5, 1]])