loading a variable from a .mat file into a differe

2020-04-03 13:35发布

问题:

Say I have a .mat file with several instances of the same structure, each in a different variable name.

I want to process each instance found in a file (which I find using whos('-file' ...). I was hoping that load would let me specify the destination name for a variable so that I didn't have to worry about collisions (and so that I didn't have to write self-modifying code a la eval).

The brute force way to do this appears to be creating a helper function that, using variables with names that hopefully don't conflict with the .mat contents, does something like:

  1. Does a whos on the file to get the contained names.
  2. Iteratively load each contained structure.
  3. Uses eval to assign the loaded structure into, say, a cell array (where one column of the array contains the .mat file's structure names and a corresponding column with the actual contents of each structure from the .mat file).

Is there no more elegant way to accomplish the same thing?

回答1:

Of course you can! Just use load with an output argument.

x = 1;
save foo;

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


回答2:

you can load the data in a MAT file into a structure

ws = load('matlab.mat');

the fields of the structure ws will be the variables in the MAT file. You can then even have a cell array of structures

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

Example

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