Matlab:加载一个.mat文件,为什么它是一个结构?我可以将存储的变量加载到内存中吗?

时间:2011-01-17 22:04:22

标签: matlab matlab-load

相关代码:

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


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

但是当我查看工作区时,它会将'bigMatrix'显示为1x1结构。然而,当我点击结构时,它是实际数据(在这种情况下是一个998x294矩阵)。

4 个答案:

答案 0 :(得分:9)

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

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

来返回变量
function result = loadStructFromFile(fileName, environmentName) 
    tmp = load(fileName, environmentName);
    result = tmp.(environmentName); 

答案 1 :(得分:3)

即使您只指定一个变量名称,LOAD仍会将其输出到结构中。在您的情况下,您有一个选项是使用函数STRUCT2CELLLOAD的输出转换为单元格数组,然后使用variable output argument list返回此结果:

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

使用VARARGOUT还有一个好处,即如果environmentName匹配.MAT文件中的多个变量,您可以从函数中返回所有变量。例如,如果您的.MAT文件有三个变量N1N2N3,而environmentNameN*,您可以通过调用全部获取它们您的多功能输出功能:

[N1,N2,N3] = loadStructFromFile('values.mat','N*');

答案 2 :(得分:1)

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

加载结构时,如果要直接分配输出结构中的子字段,可以使用structfun和以下命令:

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

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

答案 3 :(得分:0)

您还可以尝试使用点表示法访问已知字段,以使所有操作都在一行代码中完成。

df = pd.read_excel(excel_link, sheet_name, dtype=str)

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