2

いくつかの.matファイルをワークスペースにロードしようとしています。しかし、それらは互いに上書きしているようです。代わりに、私は彼らに追加​​してもらいたい。私は次のようなことができることを知っています:

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

次に、変数を手動で追加します。

しかし、変数はたくさんあり、それぞれに追加ステートメントを作成することは非常に望ましくありません(最後の手段としては可能ですが)。load()(割り当てなしでコマンドを使用して).matファイルをワークスペースにロードして追加する方法はありますか?

4

3 に答える 3

2

「追加」の意味は完全には明確ではありませんが、データを扱いやすい形式にロードする方法は次のとおりです。

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

これは、動的フィールド参照を利用して、リスト内の各ファイルの内容を構造体の独自のフィールドにロードしますloaded。ここから、フィールドを反復処理してデータを操作できます。

于 2012-07-16T05:08:40.613 に答える
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
于 2012-10-09T14:19:34.163 に答える
0

クラークの答えと関数は実際に私の状況を完全に解決しました...私はそれを少し面倒にするために次のコードを追加しました。これを先頭に追加して、「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

matlabで特定の拡張子名を持つファイルのリストを処理することから変更されました)。

ありがとう、ジェイソン

于 2013-06-04T02:31:04.740 に答える