将多个.mat文件加载到Matlab工作区

时间:2012-07-16 04:32:05

标签: matlab matlab-load

我正在尝试将几个.mat文件加载到工作区。但是,它们似乎互相覆盖。相反,我希望他们追加。我知道我可以做类似的事情:

S=load(file1)
R=load(file2)

然后手动附加变量。

但是有很多变量,并且为每个变量添加附加声明是非常不可取的(尽管可以作为最后的手段)。有没有办法让我将.mat文件加载到工作区(通过使用load()命令而无需赋值)并将它们追加?

3 个答案:

答案 0 :(得分:2)

“append”的含义并不完全清楚,但这里有一种方法可以将数据加载到一个易于处理的格式中:

file_list = {'file1';'file2';...};
for file = file_list'
    loaded.(char(file)) = load(file);
end

这使用动态字段引用将列表中每个文件的内容加载到loaded结构的自己的字段中。您可以迭代字段并操纵数据,但是您可以从此处操作。

答案 1 :(得分:2)

听起来你有一种情况,其中每个文件都包含一个矩阵变量A,并且你想要沿着某个维度将所有这些矩阵的串联加载到内存中。我有类似的需求,并编写了以下函数来处理它。

function var = loadCat( dim, files, varname )
%LOADCAT Concatenate variables of same name appearing in multiple MAT files
%  
%   where dim is dimension to concatenate along,
%         files is a cell array of file names, and
%         varname is a string containing the name of the desired variable

    if( isempty( files ) )
        var = [];
        return;
    end
    var = load( files{1}, varname );
    var = var.(varname);

    for f = 2:numel(files),

        newvar = load( files{f}, varname );
            if( isfield( newvar, varname ) )
                var = cat( dim, var, newvar.(varname) );
            else
                warning( 'loadCat:missingvar', [ 'File ' files{f} ' does not contain variable ' varname ] );
            end
        end 

    end

答案 2 :(得分:0)

Clark的答案和功能实际上完全解决了我的情况...我刚刚添加了以下一些代码,使其变得不那么乏味。只需将其添加到开头并删除“files”参数:

[files,pathname] = uigetfile('*.mat', 'Select MAT files (use CTRL/COMM or SHIFT)', ...
   'MultiSelect', 'on'); 

或者,从这个位开始可能更有效:

[pathname] = uigetdir('C:\');
files = dir( fullfile(pathname,'*.mat') );   %# list all *.mat files
files = {files.name}';                       %# file names

data = cell(numel(files),1);                 %# store file contents
for i=1:numel(files)
    fname = fullfile(pathname,files{i});     %# full path to file
    data{i} = load(fname);                   %# load file
end

(从process a list of files with a specific extension name in matlab修改)。

谢谢, 杰森