Matlab與C混合編程之數組傳遞問題

首先說明一點,數組在Matlab和C中的存儲方式是不同的,前者是按列存儲,後者是按行存儲。舉個例子,對於一個數組A = [1, 2, 3; 4, 5, 6], Matlab存儲順序是1, 4, 2, 5, 3, 6,而C中是1, 2, 3, 4, 5, 6. 下面說下在混合編程時Matlab中的數組傳遞到C中想獲取第i行j列的數怎麼取。
matlab數據可以通過mxGetPr傳遞到c中,且mxGetM和mxGetN能分別獲取矩陣的行和列,對於數組A,則M = 2, N = 3;那麼第i行第j列數據索引爲(j*M+i),這裏很多人會有疑問,不是說C和Matlab中數組存儲方式不同嗎,那麼在C中索引應該爲(i*N+j)呀。其實,在數組從Matlab傳遞到C的時候,首先會把它轉化成一維的數組,那麼這種按列存儲的數組就變成下面的形式


這裏寫圖片描述

每個方格代表一列,且一共有N列,每個裏面含有M個數據,其實這種形式就是Matlab的存儲方式,那麼Matlab將這種形式的數據傳遞給C,可想而知在C中對該數組進行索引操作其實跟Matlab中是一樣的,不需要轉化成C中存儲的形式來考慮。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章