numpy C order与 F order 的区别原因是什么?

发布于 2022-08-30 15:50:39 字数 251 浏览 10 评论 0

比如二维数组 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谈情不如逗狗 2022-09-06 15:50:39

所谓的Row major order和Column-major order 的区别,主要看你拿这数组作什么运算,如果是要依次访问每列的元素,Fortran Order(即Column-major order)下每列在内存中是连续的,这种结构相对更加Cache-friendly。这并不是编程语言自身的特性,在C语言中完全可以使用Column-major order,只不过访问起来计算index不太习惯而已。Fortran大概是因为主要用于科学计算,Column-major order对于一些矩阵运算有性能优势。

明天过后 2022-09-06 15:50:39

楼上说的有道理,可能就是因为这样,毕竟矩阵运算,列向量用这种更好表达,而且局部性也好

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文