导入[]用于包含struct数组的MAT文件 - 只导入第一个元素?

eac*_*eau 5 arrays import matlab struct wolfram-mathematica

我试图从保存的MATLAB结构数组导入数据,但似乎Mathematica只导入第一个元素.

MATLAB

blank = struct('x', [], 'y', [], 'z', []);
data = repmat(blank, 1, 10);

for i = 1:10
    data(i) = struct('x', i, 'y', i * 2, 'z', i * 3);
end

save('test.mat', 'data');
Run Code Online (Sandbox Code Playgroud)

数学

In[76]:= Import["test.mat", "LabeledData"]
Out[76]= {"data" -> {"x" -> {{1.}}, "y" -> {{2.}}, "z" -> {{3.}}}}
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样?

作为临时修复,我只是简单地将多个结构存储在单元格数组中,即

data{i} = struct(...)
Run Code Online (Sandbox Code Playgroud)

Mathematica似乎能够处理这么好.

jml*_*pez 0

我无法真正解释该行为,但为了能够读取 Mathematica 中的文件,最好指定您正在使用的 Matlab 版本。在 MATLAB 中尝试使用版本 6 保存数据。

>> save('test.mat', '-v6', 'data')
Run Code Online (Sandbox Code Playgroud)

然后在数学中:

In[1]:= Import["test.mat", "LabeledData"]
Out[1]= {"data" -> {"x" -> {{1.}}, "y" -> {{2.}}, "z" -> {{3.}}}, {{2.}}, {{4.}}, {{6.}}, {{3.}}, {{6.}}, {{9.}}, {{4.}}, {{8.}}, {{12.}}, {{5.}}, {{10.}}, {{15.}}, {{6.}}, {{12.}}, {{18.}}, {{7.}}, {{14.}}, {{21.}}, {{8.}}, {{16.}}, {{24.}}, {{9.}},{{18.}}, {{27.}}, {{10.}}, {{20.}}, {{30.}}}
Run Code Online (Sandbox Code Playgroud)

我尝试使用 v4 保存,但这在 MATLAB 中不起作用。请注意,Mathematica 中的文档显示“导入完全支持 MAT 格式的版本 4 和 5”。我希望这有帮助。