我正在做一些计算,并测量ufunc在不同轴上的性能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 上的2 倍。cumsum
为什么会这样,幕后发生了什么?很高兴能清楚地了解其背后的原因。谢谢!
更新:经过一番研究,我意识到如果有人正在构建一个应用程序,他们总是只对某个轴求和,那么数组应该以适当的顺序初始化:即轴 = 1 总和的C 顺序或Fortran 顺序对于axis = 0 sums,以节省CPU时间。
另外:这个关于连续数组和非连续数组之间差异的优秀答案有很大帮助!