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

popop
  • 126

比如二维数组 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 的方式是有优点还是?不明白为何要这么做,求解释。

回复
阅读 4.5k
2 个回答
CJex
  • 2.3k

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏