Python:多维数组的迭代是不是超慢?

标签 python performance numpy

我必须遍历二维整数数组中的所有项目并更改值(根据某些规则,不重要)。

我很惊讶 python 运行时和 C# 或 java 运行时之间的性能差异如此之大。我是否编写了完全错误的 python 代码 (v2.7.2)?

import numpy
a = numpy.ndarray((5000,5000), dtype = numpy.int32)
for x in numpy.nditer(a.T):
    x = 123
>python -m timeit -n 2 -r 2 -s "import numpy; a = numpy.ndarray((5000,5000), dtype=numpy.int32)" "for x in numpy.nditer(a.T):" "  x = 123"
2 loops, best of 2: 4.34 sec per loop

例如,C# 代码仅执行 50 毫秒,即 python 几乎慢 100 倍! (假设 matrix 变量已经初始化)

for (y = 0; y < 5000; y++)
for (x = 0; x < 5000; x++)
    matrix[y][x] = 123;

最佳答案

是的!在 python 中遍历 numpy 数组很慢。 (也比遍历 python 列表慢。)

通常,您会避免直接遍历它们。

如果你能给我们一个你正在改变事物所基于的规则的例子,那么它很可能很容易矢量化。

举个例子:

import numpy as np

x = np.linspace(0, 8*np.pi, 100)
y = np.cos(x)

x[y > 0] = 100

但是,在许多情况下,由于算法(例如有限差分法)或为了减少临时数组的内存成本,您必须进行迭代。

在这种情况下,请查看 Cython , Weave ,或类似的东西。

关于Python:多维数组的迭代是不是超慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10112745/

相关文章:

python - 我怎样才能在 python 中执行 'a' + 1 #=> 'b'?

Python pygame 如何设置FPS

python - 从另一个数组更新 numpy 二维数组索引

python - 该函数是否正确计算卷积?

python - 使用 numpy.genfromtxt 填充缺失值

performance - 降低了 x64 目标上的 F# 性能?

sql - 如何从参数开始并按顺序递增的表字段中查找缺失的数字?

c++ - 创建 boost::file_mapping 对象的成本?

python - 如何获得 numpy 数组的最大二维切片?

python - Flask 应用程序未连接到端口