2012-07-16 45 views
2

我試圖將幾個.mat文件加載到工作空間。但是,他們似乎相互覆蓋。相反,我希望他們追加。我知道我可以這樣做:將多個.mat文件加載到Matlab工作空間

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

,然後手動添加的變量。

但是有很多變量,並且爲每個變量添加附加語句都是非常不可取的(儘管可能作爲最後的手段)。有沒有辦法讓我加載.mat文件到工作區(通過使用load()命令而不分配)並讓它們追加?

+0

通過「他們似乎彼此覆蓋」你的意思是相同的變量名在那些.MAT文件?如果是這種情況,除了逐個加載文件,然後重命名在兩個文件上共享的變量並加載下一個文件之外,沒有什麼可以完成的。 – TJ1 2012-07-16 07:04:46

+0

是的,這就是我的意思。那很糟糕。但是,謝謝 – CHP 2012-07-16 07:51:10

回答

2

它不是完全清楚你的意思是「追加」但這裏有一種方式來獲得裝入格式的數據,應該是容易對付:

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

這使得使用動態字段引用來將列表中每個文件的內容加載到loaded結構的其自己的字段中。你可以在這裏遍歷字段並操作數據。

+0

這不是我想要的答案,但可能是下一個最好的東西,因爲我想要的東西不能完成。我會繼續接受它。 – CHP 2012-07-17 08:08:11

+0

一旦加載了所有內容,您可以使用'fieldnames'來確定您已加載到結構中的所有不同變量。然後你可以'eval'將它們放到工作區中(而不僅僅是在結構中),根據需要「附加」(但是你可以定義它)。 – tmpearce 2012-07-17 13:46:12

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 
0

克拉克的答案和函數實際上完美地解決了我的情況......我只是添加了下面的代碼,使它有點乏味。只需將其添加到開始,擺脫了「文件」的說法:

[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修改) 。

感謝, 傑森

相關問題