将.mat文件中的变量加载到不同名称的变量中

jhf*_*ntz 7 reflection file-io matlab

假设我有一个.mat文件,其中包含几个相同结构的实例,每个实例都有一个不同的变量名.

我想处理文件中找到的每个实例(我发现使用whos('-file' ...).我希望load能让我指定一个变量的目的地名称,这样我就不用担心碰撞了(因此我不必编写自修改代码eval).

执行此操作的强力方法似乎是创建一个辅助函数,使用名称希望与.mat内容不冲突的变量,可以执行以下操作:

  1. 是否whos在文件上获取包含的名称.
  2. 迭代加载每个包含的结构.
  3. 用于eval将加载的结构分配到单元数组中(其中数组的一列包含.mat文件的结构名称,而相应的列包含.mat文件中每个结构的实际内容).

有没有更优雅的方式来完成同样的事情?

And*_*ein 8

当然可以!只需使用load输出参数.

x = 1;
save foo;

ls = load('foo.mat');
ls.x
Run Code Online (Sandbox Code Playgroud)


Azi*_*zim 5

您可以将loadMAT 文件中的数据转换为结构

ws = load('matlab.mat');
Run Code Online (Sandbox Code Playgroud)

该结构体的字段ws将是 MAT 文件中的变量。然后你甚至可以拥有一个结构元胞数组

ws{1}=load('savedWorkSpace_1.mat');
ws{2}=load('savedWorkSpace_2.mat');
Run Code Online (Sandbox Code Playgroud)

例子

>> x = 1;
>> save ws_1;
>> x = 2;
>> y = 1;
>> save ws_2
>> clear
>> ws{1} = load('ws_1.mat')
>> ws{2} = load('ws_2.mat')
>> ws{1}.x
    x = 1
>> ws{2}.x
    x = 2
Run Code Online (Sandbox Code Playgroud)