我必須遍歷整數的二維數組中的所有項目並更改值(根據某些規則,不重要)。Python:是多維數組超級緩慢的迭代嗎?
我很驚訝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毫秒,即蟒較慢幾乎100倍! (假設matrix
變量已經初始化)
for (y = 0; y < 5000; y++)
for (x = 0; x < 5000; x++)
matrix[y][x] = 123;
爲什麼你會驚訝於解釋語言比JIT編譯語言慢?你有沒有試過用[PyPy](http://pypy.org/)代替CPython? – 2012-04-11 19:41:10
使用Numpy是爲了避免顯式的Python循環,並使用向量化的NumPy函數。 – 2012-04-11 19:42:04
@AdamRosenfield:PyPy還沒有NumPy支持。 – 2012-04-11 19:43:01