我有一个名为sources的变量,它包含八个数字:
sources =
0.6028
0.7112
0.2217
0.1174
0.2967
0.3188
0.4242
0.5079
我使用save('sources.mat', 'sources');
保存,然后使用sources = load('sources.mat');
然而,它不再只是一个包含八个数字的数组,现在是sources变量:
sources =
sources: [8x1 double]
保存/加载时有没有办法摆脱这种嵌套?加载后必须始终检索嵌套变量,这很麻烦。当我使用sources = load('sources.mat');
时,我想回来
sources =
0.6028
0.7112
0.2217
0.1174
0.2967
0.3188
0.4242
0.5079
可以这样做吗?
答案 0 :(得分:1)
在您向我们展示的最简单场景中,您可以创建一个提取数据的内联函数:
loadAndExtract = @(varname) arrayfun(@(x) x.(varname), load(varname));
现在您只需将数据加载为矩阵:
sources = loadAndExtract('sources.mat'); % load and extract data
这种方法的缺点是你被迫匹配文件的名称和变量的名称。如果这对您来说是一个问题,您可以使功能稍微复杂一些:
loadAndExtract = @(dataName,varname) arrayfun(@(x) x.(varname), load(dataName));
现在,如果您使用特定名称加载数据:
save('mySources','sources');
您仍然可以通过指定变量名称和文件名来加载它。
sources = loadAndExtract('mySources','sources');
原则上你可以编写函数来从同一个文件中提取多个数据,但是内联函数变得越来越复杂,我建议把它作为一个单独的函数。