保存/加载时防止MatLab嵌套变量?

时间:2017-04-02 09:35:33

标签: matlab

我有一个名为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

可以这样做吗?

1 个答案:

答案 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');

原则上你可以编写函数来从同一个文件中提取多个数据,但是内联函数变得越来越复杂,我建议把它作为一个单独的函数。