matlab和Fortran二維數組為什麼按列優先存儲?

其他大多數語言都是行優先,有什麼歷史原因嗎?效率如何呢?


1.數據的讀取形式和存儲形式無關,存儲時都是內存中的連續段,不存在讀寫效率的問題。

2.由於在數學發展過程史中向量默認均指列向量,這樣設計可以直接服務已有知識體系,比如a^{T}a 是向量的內積,若用MATLAB寫就是a"*a,不存在新的學習成本。


matlab 早期是由Fortran 編寫的.

"需要注意的是,雖然MATLAB用C語言重寫,但是在矩陣存儲方式上卻和FORTRAN保持一致,兩者使用的均為列優先存儲,而非行優先存儲"

MATLAB

至於Fortran為什麼用列有限處理, 就不知道了


似乎是這樣做比較符合科學家的習慣,比如線性代數中的列向量比行向量用到的場合更多些。當然這個未必是歷史原因


列存儲和行存儲的效率是有區別的,主要取決於緩存的優化。Fortran認為離你最近的那個下標變動最頻繁。


需要注意的是,雖然MATLAB用C語言重寫,但是在矩陣存儲方式上卻和FORTRAN保持一致,兩者使用的均為列優先存儲,而非行優先存儲[c]。在進行較大的矩陣運算時,這一差別對性能的影響是不應忽略的。——維基百科


推薦閱讀:

用c語言寫一個超市管理系統?
Dev C++編譯出錯[Error] ld returned 1 exit status 如何解決?
char *ds = gets();這行代碼在VS2017為什麼可以運行,沒有error?
C 語言代碼出錯為什麼顯示「燙燙燙」,而不是其它字?
在寫代碼的時候,加法快還是乘法快還是都一樣?

TAG:MATLAB | C編程語言 | 彙編語言 | Fortran |