python - 使用索引遍历 numpy(相当于 python 枚举的 numpy)

标签 python numpy

我正在尝试创建一个函数来计算多维 numpy 数组中元素之间的晶格距离(水平和垂直步数)。为此,我需要在遍历数组时从每个元素的索引中检索实际数字。我想将这些值存储为我可以通过距离公式运行的数字。

对于示例数组A

 A=np.array([[1,2,3],[4,5,6],[7,8,9]])

我想创建一个循环遍历每个元素,对于第一个元素 1,它将检索 a=0, b=0,因为 1 在 A[0,0],然后 a=0, b=元素 2 为 1,因为它位于 A[0,1],依此类推...

我设想的输出是数组中每个元素的两个数字(对应于该元素的两个索引值)。所以在上面的例子中,这将是我分配给 a 和 b 的两个值。我只需要在循环中检索这两个数字(而不是单独保存为另一个数据对象)。

任何关于如何做到这一点的想法将不胜感激!

最佳答案

随着我对 numpy 和 pandas 生态系统越来越熟悉,我越来越清楚迭代通常是完全错误的,因为相比之下它有多慢,并且编写使用矢量化操作是最好的只要有可能。虽然一开始这种风格并不明显/Pythonic,但我(有趣地)通过矢量化操作获得了可笑的加速;超过 1000 倍的情况下换出像一些行迭代的形式 .apply(lambda)

@MSeifert's answer更好地提供了这一点,并且在任何实际大小的数据集上的性能都会显着提高

More general Answer by @cs95 covering and comparing alternatives to iteration in Pandas


原始答案

您可以使用 numpy.ndenumerate 遍历数组中的值获取数组中值的索引。

使用上面的文档:

A = np.array([[1,2,3],[4,5,6],[7,8,9]])
for index, values in np.ndenumerate(A):
    print(index, values)  # operate here

关于python - 使用索引遍历 numpy(相当于 python 枚举的 numpy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42082607/

相关文章:

python - 当将 numpy 数组输入 OpenCv 时,OpenCv 会引发错误

python - Peewee:通过多对多关系进行过滤

python - py3 中的 OpenCV Python : how to avoid cv2. imwrite() 内存 "leak"?

python - 为什么在 MNIST 教程中使用负 reshape (-1)?

arrays - Python 二维数组获取第一列等于0的所有行

python - 使用 SWIG 在 Python 中包装 C++ 类

python - 如何使用 Python 连接 HBase 和 Spark?

python - 如何在 Python 中将字符串转换为复数?

python - 通过跳过 Python/Pandas 中的某些值来计算数据帧平均值

python - numpy.random.shuffle 的令人惊讶的行为