C 向matlab傳遞多維陣列,索引超出界限報錯

2021-08-14 09:29:20 字數 665 閱讀 9031

matlab程式可編譯成供c#呼叫的程式集即dll檔案,但matlab與c#的資料型別和結構存在著很大的差異,為了解決差異性問題,matlab提供了mathworks.matlab.net.arrays了命名空間中一系列的型別轉換方法,詳見:matlab官方手冊『rules for data conversion between .net and matlab』。想詳看的,請自行查閱。

基本用法:

rawdataarr為c#定義的數值或者陣列。

mwarray array = new mwnumericarray(rawdataarr);

mwarray max = myhello.inte***cecsharpmatlab(array);

以上方法原則是適用於任何維度的陣列,但這裡要注意超過2維以上的陣列,matlab與c#的定義方式不一樣,所以,在傳值的時候如果忽略這一點,雖然值能夠傳進去,但矩陣的維度已經悄悄發生了變化。

舉例說明:

c#中定義a[m,n,l]表示:m頁,n行,l列;

matlab中定義b[m,n,l]表示:m行,n列,l頁;

如果直接把a[m,n,l]傳進matlab中,並賦值給b,則b的維度將變成m行n列l頁;在參與矩陣的計算過程中,會出錯。所以會報錯。

在程式設計的過程中,一定要小心,處處是雷區。

這裡只做mark一下。

c 傳遞多維陣列

在c c 中,給函式傳遞多維陣列有兩種表示法 陣列表示法和指標表示法。陣列表示法 void display int arr 5 int rows 指標表示法 void display int arr 5 int rows 值得注意的是,在使用陣列表示法的時候,第二維必須要指定,否則編譯器無法使用下標...

c 向MATLAB傳遞字串陣列

通過matlab編寫功能函式,編譯成.dll,供c 中呼叫。由於在matlab中編譯的函式中暴露出的引數中是多個檔案的物理路徑 即字串陣列做引數 而在c 中獲取的檔案物理路徑也是通過string字串陣列存起來的,而matlab中一般是通過mwcellarray存放的。所以兩者存在乙個轉化,現將本人經...

函式傳遞多維陣列

一維陣列作為函式引數可以寫成 f int array int size 或者 f int array int size 中的陣列的維數可選 二維陣列作為函式引數可以寫成 f int array 10 int size1 int size2 的形式,除了第一維的引數可以省略,其他的引數必須顯示說明。以...