Matlab load mat into variable

load does not behave this way otherwise load would behave inconsistently depending upon the number of variables that you have requested which would lead to an extremely confusing behavior.

To illustrate this, imagine that you wrote a general program that wanted to load all variables from a .mat file, make some modification to them, and then save them again. You want this program to work with any file so some files may have one variable and some may have multiple variables stored in them.

If load used the behavior you've specified, then you'd have to add in all sorts of logic to check how many variables were stored in a file before loading and modifying it.

Here is what this program would look like with the current behavior of load

function modifymyfile(filename)
    data = load(filename);

    fields = fieldnames(data);

    for k = 1:numel(fields)
        data.(fields{k}) = modify(data.(fields{k}));
    end

    save(filename, '-struct', 'data')
end

If the behavior was the way that you think you want

function modifymyfile(filename)

    % Use a matfile to determine the number of variables
    vars = whos(matfile(filename));

    % If there is only one variable
    if numel(vars) == 1
        % Assign that variable (have to use eval)
        tmp = load(filename, vars(1).name);
        tmp = modify(tmp);

        % Now to save it again, you have to use eval to reassign
        eval([vars(1).name, '= tmp;']);

        % Now resave
        save(filename, vars(1).name);
    else
        data = load(filename);

        fields = fieldnames(data);

        for k = 1:numel(fields)
            data.(fields{k}) = modify(data.(fields{k}));
        end

        save(filename, '-struct', 'data');
    end
end

I'll leave it to the reader to decide which of these is more legible and robust.

The best way to do what you're trying to do is exactly what you've shown in your question. Simply reassign the value after loading

data = load('myfile.mat', 'var1');
data = data.var1;

Update

Even if you only wanted the variable to not be assigned to a struct when a variable was explicitly specified, you'd still end up with inconsistent behavior which would make it difficult if my program accepted a list of variables to change as a cell array

variables = {'var1', 'var2'}

data = load(filename, variables{:});    % Would yield a struct

variables = {'var1'};

data = load(filename, variables{:});    % Would not yield a struct

If the MAT-file contains one variable, use

x = importdata(mat_file_name)

Tags:

Matlab

Load