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

时间:2012-02-01 22:27:43

标签: matlab reflection file-io

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

我想处理文件中找到的每个实例(我使用whos('-file' ...找到)。我希望load允许我指定变量的目标名称,这样我就不必担心冲突了(因此我不必编写自修改代码la {{1 }})。

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

  1. 文件上的eval是否可以获取包含的名称。
  2. 迭代加载每个包含的结构。
  3. 使用whos将加载的结构分配到单元格数组中(其中数组的一列包含.mat文件的结构名称和相应的列,其中包含.mat中每个结构的实际内容)文件)。
  4. 有没有更优雅的方法来完成同样的事情?

2 个答案:

答案 0 :(得分:8)

当然可以!只需将load与输出参数一起使用。

x = 1;
save foo;

ls = load('foo.mat');
ls.x

答案 1 :(得分:4)

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

ws = load('matlab.mat');

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

ws{1}=load('savedWorkSpace_1.mat');
ws{2}=load('savedWorkSpace_2.mat');

实施例

>> 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