我正在进行一些计算,并测量了不同轴上的ufuncs(如
更新:经过一番研究,我意识到如果有人正在构建一个应用程序,在该应用程序中他们总是对特定轴进行求和,则应以适当的顺序初始化数组:即对于轴=1的求和使用C-order,对于轴=0的求和使用Fortran-order,以节省CPU时间。
np.cumsum
)的性能,以使代码更具性能。In [51]: arr = np.arange(int(1E6)).reshape(int(1E3), -1)
In [52]: %timeit arr.cumsum(axis=1)
2.27 ms ± 10.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [53]: %timeit arr.cumsum(axis=0)
4.16 ms ± 10.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
cumsum
沿着轴1的速度几乎比沿着轴0的cumsum
快2倍。为什么会这样,背后发生了什么?有一个清晰的理解原因将是很好的。谢谢!
更新:经过一番研究,我意识到如果有人正在构建一个应用程序,在该应用程序中他们总是对特定轴进行求和,则应以适当的顺序初始化数组:即对于轴=1的求和使用C-order,对于轴=0的求和使用Fortran-order,以节省CPU时间。
此外:这篇关于连续和非连续数组之间差异的优秀答案帮了很大忙!
sum
,几乎所有可以在轴上进行缩减的 ufunc 都表现出相同的行为。 - kmario23