matlab和Fortran二維數組為什麼按列優先存儲?
01-08
其他大多數語言都是行優先,有什麼歷史原因嗎?效率如何呢?
1.數據的讀取形式和存儲形式無關,存儲時都是內存中的連續段,不存在讀寫效率的問題。2.由於在數學發展過程史中向量默認均指列向量,這樣設計可以直接服務已有知識體系,比如是向量的內積,若用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 語言代碼出錯為什麼顯示「燙燙燙」,而不是其它字?
※在寫代碼的時候,加法快還是乘法快還是都一樣?