Python Numpy 二维数组迭代

标签 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)]

有什么方法可以在不展平列表的情况下做到这一点,或者有什么更好的方法来做到这一点?

最佳答案

我认为您正在寻找的功能是 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/

相关文章:

python - 计算非唯一数组元素的顺序

Python ftplib,通过ftp获取最新文件

ios - 如何使用 ios Swift 3 从 SOAP 网络服务方法获取 json 数组字符串?

ios - 如何使用 SDWebImage 从 URL 下载图像,然后将这些图像附加到 UIImage 数组?

javascript - 加密......几乎可以工作

python-2.7 - 对列表列表运行计算的最快方法

python - 为什么 int(maxint) 给出的是 long,而 int(int(maxint)) 给出的是 int?这是 NumPy 错误吗?

python - 设置 dtype 时 Numpy 数组上的重复值

python - Pandas fillna with method=None (默认值)会引发错误

python - 如何从头开始编写词法分析器?