numpy C order与 F order 的区别原因是什么?
比如二维数组 a[2][2]
,使用 C,其在内存中存储为
a[0][0] a[0][1] a[1][0] a[1][1]
而在 Fortran 里,其顺序为
a[0][0] a[1][0] a[0][1] a[1][1]
Fortran 为何会使用这种存储方式,相对于 C 的方式是有优点还是?不明白为何要这么做,求解释。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
所谓的Row major order和Column-major order 的区别,主要看你拿这数组作什么运算,如果是要依次访问每列的元素,Fortran Order(即Column-major order)下每列在内存中是连续的,这种结构相对更加Cache-friendly。这并不是编程语言自身的特性,在C语言中完全可以使用Column-major order,只不过访问起来计算index不太习惯而已。Fortran大概是因为主要用于科学计算,Column-major order对于一些矩阵运算有性能优势。
楼上说的有道理,可能就是因为这样,毕竟矩阵运算,列向量用这种更好表达,而且局部性也好