【发布时间】:2013-10-29 01:14:26
【问题描述】:
为了加快 np.std、np.sum 等函数沿 n 维巨大 numpy 数组的轴执行,建议沿最后一个轴应用。
当我这样做时, np.transpose 将我想要操作的轴旋转到最后一个轴。是真的重新洗牌内存中的数据,还是只是改变轴的寻址方式?
当我尝试使用 %timeit 测量时间时。它在微秒内完成了这个转置,(比我复制 (112x1024x1024) 数组所需的时间要短得多。
如果它实际上并没有对内存中的数据进行重新排序而只是更改了地址,那么当应用于新旋转的最后一个轴时,它是否仍会加快 np.sum 或 np.std 的速度?
当我尝试测量它时,我似乎确实加快了速度。但我不明白怎么做。
更新
转置似乎并没有真正加快速度。最快的轴在 C 排序时是最后一个,而在 Fortran 排序时是第一个。因此,在应用 np.sum 或 np.std 之前进行转置是没有意义的。 对于我的特定代码,我通过在数组创建期间给出 order='FORTRAN' 解决了这个问题。这使得第一个轴最快。
感谢大家的回答。
【问题讨论】:
标签: python arrays optimization numpy