8

相关代码:

function result = loadStructFromFile(fileName, environmentName) 
    result = load(fileName, environmentName);


bigMatrix = loadStructFromFile('values.mat','bigMatrix'); 

但是当我查看工作区时,它会将“bigMatrix”显示为 1x1 结构。但是,当我单击结构时,它是实际数据(在本例中为 998x294 矩阵)。

4

4 回答 4

10

正如LOAD的文档所示,如果您使用输出参数调用它,则结果将在结构中返回。如果您不使用输出参数调用它,则会在本地工作区中创建变量,并使用它们保存时的名称。

对于您的函数loadStructFromFile,如果保存的变量名称可以有不同的名称(我假设environmentName),您可以通过编写返回变量

function result = loadStructFromFile(fileName, environmentName) 
    tmp = load(fileName, environmentName);
    result = tmp.(environmentName); 
于 2011-01-17T22:25:53.850 回答
3

即使您只指定一个变量名,LOAD仍会以结构形式输出它。在您的情况下,您可以选择使用函数STRUCT2CELLLOAD的输出转换为元胞数组,然后使用变量输出参数 list返回此结果:

function varargout = loadStructFromFile(fileName,environmentName)
  varargout = struct2cell(load(fileName,environmentName));
end

使用VARARGOUT的另一个好处是,如果environmentName匹配 .MAT 文件中的多个变量,您可以从函数中将它们全部返回。例如,如果您的 .MAT 文件包含三个变量N1N2、 和N3以及environmentNameis N*,您可以通过调用具有多个输出的函数来获取它们:

[N1,N2,N3] = loadStructFromFile('values.mat','N*');
于 2011-01-17T22:26:12.480 回答
2

这是一篇旧帖子,但如果它对某些人有用:

当你加载一个结构,并且你想直接分配输出结构中的子字段时,你可以使用structfun下面的命令:

bigMatrixOUT = structfun(@(x) x,load('values.mat','bigMatrix'))

bigMatrixOUT 将直接包含 的字段bigMatrix,而不是bigMatrixOUT.bigMatrix

于 2018-02-01T08:15:50.197 回答
1

您也可以尝试使用点表示法访问已知字段,这样这一切都发生在一行代码中。

bigMatrix = load('values.mat','bigMatrix').bigMatrix; 

或者

bigMatrix = load('values.mat','bigMatrix').('bigMatrix'); 
于 2020-10-07T21:14:23.527 回答