Python Numpy二维数组迭代

时间:2011-11-14 17:31:56

标签: python arrays numpy iterator

想要建立一个二维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)]

如果不事先将列表弄平,或者通常更好的方法来执行此操作,是否可以这样做?

2 个答案:

答案 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]])