【发布时间】:2016-12-27 12:42:37
【问题描述】:
下面,我比较了处理 C 连续数组和 Fortran 连续数组 (C vs FORTRAN memory order) 之间的求和运算时的性能。我设置axis=0 以确保数字按列相加。我很惊讶 Fortran 连续数组实际上比它的 C 对应物慢。是不是 Fortran 连续数组在列中具有连续的内存分配,因此在按列操作时更好?
import numpy as np
a = np.random.standard_normal((10000, 10000))
c = np.array(a, order='C')
f = np.array(a, order='F')
在 Jupyter 笔记本中,运行
%timeit c.sum(axis=0)
10 loops, best of 3: 84.6 ms per loop
%timeit f.sum(axis=0)
10 loops, best of 3: 137 ms per loop
【问题讨论】:
-
您正在这样做,但使用的是 Python...不是有一些仿真吗?
-
无法验证这一点。对我来说,
b.sum(axis=0)是 2.51 秒,c.sum(axis=0)是 0.14 秒 -
您使用的是哪个版本的
numpy? -
np.add.reduce(x, axis=0)表现出相同的行为,这也是sum在幕后所做的 -
开始实施here
标签: python numpy multidimensional-array scipy