gpt4 book ai didi

python - numpy.transpose 是否在内存中重新排序数据?

转载 作者:太空狗 更新时间:2023-10-29 16:55:18 33 4
gpt4 key购买 nike

为了加速 np.std、np.sum 等函数沿 n 维巨大 numpy 数组的轴,建议沿最后一个轴应用。

当我这样做时,np.transpose 将我要操作的轴旋转到最后一个轴。它真的是在重新排列内存中的数据,还是只是改变轴的寻址方式?

当我尝试使用 %timeit 测量时间时。它在微秒内完成了这个转置,(比复制我拥有的 (112x1024x1024) 数组所需的时间小得多。

如果它实际上不是对内存中的数据重新排序而只是更改寻址,那么当应用于新旋转的最后一个轴时,它是否仍会加速 np.sum 或 np.std?

当我尝试测量它时,我似乎确实加快了速度。但我不明白。

更新

转置似乎并没有真正加快速度。最快的轴在按 C 顺序排列时是最后一个,在按 Fortran 顺序排列时是第一个。所以在应用 np.sum 或 np.std 之前转置是没有意义的。对于我的特定代码,我通过在数组创建期间给出 order='FORTRAN' 解决了这个问题。这使得第一个轴最快。

谢谢大家的回答。

最佳答案

Transpose 只是改变了 strides ,它不会触及实际的数组。我认为为什么建议沿最终轴 sum 等的原因(我想看看它的来源,顺便说一句。)是当数组按 C 排序时,沿着最终轴走axis 保留引用位置。转置后情况就不同了,因为转置后的数组将按 Fortran 顺序排列。

关于python - numpy.transpose 是否在内存中重新排序数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479384/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com