COM interface不是support結構或稀疏數組。我的意思是,你不能直接傳遞這些MATLAB和.NET之間,如果你嘗試你在MATLAB命令窗口打印以下錯誤:
警告:的ActiveX - 無效的參數類型或值
解決方法是訪問MATLAB端結構的字段,並將每個字段存儲在一個變量中,該變量可以使用支持的轉換規則之一封送回C#。
下面是一個例子:
static void Main(string[] args)
{
// load MAT-file contents into a structure variable
matlab.Execute("S = load('wind.mat')");
// get field and store in separate variable
matlab.Execute("x = S.x;");
// obtain variable "x" from MATLAB into C#
var x = (double[,,]) matlab.GetVariable("x", "base");
// print array in C#
Console.WriteLine("ndims(x) = {0}, numel(x) = {1}", x.Rank, x.Length);
for (int i = 0; i < x.GetLength(0); i++)
{
for (int j = 0; j < x.GetLength(1); j++)
{
for (int k = 0; k < x.GetLength(2); k++)
{
Console.WriteLine("x[{0},{1},{2}] = {3}", i, j, k, x[i,j,k]);
}
}
}
}
在上面的例子中,使用的MAT-文件包含一堆double
類型的多維矩陣:
>> whos -file wind.mat
Name Size Bytes Class Attributes
u 35x41x15 172200 double
v 35x41x15 172200 double
w 35x41x15 172200 double
x 35x41x15 172200 double
y 35x41x15 172200 double
z 35x41x15 172200 double
要注意的事當然,當你有一個帶有輸出參數的MAT文件時,它將返回一個結構whos字段,該結構是存儲在該文件中的變量:
>> S = load('wind.mat')
S =
u: [35x41x15 double]
v: [35x41x15 double]
w: [35x41x15 double]
x: [35x41x15 double]
y: [35x41x15 double]
z: [35x41x15 double]
因此,您可以在不指定輸出的情況下加載文件,這樣變量就可以直接加載爲單獨的文件。
你的技術是否適用於常規變量(字符串,雙精度,矩陣...)?你如何嘗試訪問你讀回的變量? C#在訪問它們之前不需要知道數據結構?在「這裏是我所嘗試的」的幾行代碼會有所幫助。 – Floris
是的,它適用於對數變量,但它不適用於結構。這是我第一次與Matlab和C#一起工作。到目前爲止,我沒有任何問題,直到我必須以某種方式將Matlab的結構轉換爲C#,我不知道如何做到這一點。 – Shafter
您是否閱讀過Mathworks網站上的一些相關文章?你可以從http://www.mathworks.com/help/matlab/matlab_external/working-with-structures.html開始。在編譯之前,如果不知道結構的細節,可能很難(如果C#工作的話)這樣做。你希望如何訪問數據? – Floris