在工作区中加载多个.mat文件

时间:2015-04-29 12:08:22

标签: matlab

我想在我的工作区中加载多个.mat文件(大约500个)。 这些文件命名为

omni_AP1_trial_1_loc_1.mat 
omni_AP1_trial_1_loc_2.mat 
omni_AP1_trial_1_loc_3.mat
.
.
omni_AP1_trial_1_loc_57.mat
.
. 
omni_AP1_trial_10_loc_1.mat 
omni_AP1_trial_10_loc_2.mat 
omni_AP1_trial_10_loc_3.mat 
.
.
omni_AP1_trial_10_loc_57.mat

我正在使用给定的代码:

files_1 = dir('omni_AP1_trial_*_loc_1.mat');
NumberOfDataset = length(files_1);

for i = 1:NumberOfDataset  
    %get allfiles matching the pattern 'dataset(i)_*'
    files = dir(sprintf('omni_AP1_trial_%d_loc_*.mat',i));
    for j = 1:length(files)
       fprintf('Current file : %s\n',files(j).name)
       a= load(files(j).name);

    end
end

在执行期间,即使fprintf语句显示正在拾取的连续文件,但结构仅保留最后一个拾取的文件,并且在循环迭代时覆盖前一个文件。

如何在工作区中将所有文件一起加载?请帮忙。

3 个答案:

答案 0 :(得分:3)

您可以在迭代中为结果创建一个结构数组:

a = []; % create empty array
files_1 = dir('omni_AP1_trial_*_loc_1.mat');
NumberOfDataset = length(files_1);

for i = 1:NumberOfDataset  
    %get allfiles matching the pattern 'dataset(i)_*'
    files = dir(sprintf('omni_AP1_trial_%d_loc_*.mat',i));
    for j = 1:length(files)
       fprintf('Current file : %s\n',files(j).name)

       a(end+1)= load(files(j).name); % store data in struct array

    end
end

答案 1 :(得分:2)

每次都会覆盖您的a值,但您可以拥有一系列结构:

a(j) = load(files(j).name);

下一个问题通常是如何在多个struct数组元素中索引相同的子元素。如果subelement是存储在文件中的变量的标量字段(如果该变量在每个文件中具有相同的名称),则可以执行

[a(:).variablename.subelement]

答案 2 :(得分:0)

为了简单起见,我尝试使用

for jj=1:57
    for ii = 1: 10
 a(ii,jj) =load(['omni_AP1_trial_' num2str(ii) '_loc_' num2str(jj)'.mat']);
    end
end

我总共有57个位置被提及为loc_1到loc_1,每个位置我正在进行10次试验,这些位置就像trial_1_loc_1,trial_2_loc_1到trial_10_loc_1。

在上面的代码中,当我不使用第一个循环(即jj)和我将num2str(jj)替换为1(即location_1)时,那么在那种情况下我将获得10个位置1的试验。当我将其更改为2时,我将对位置2进行10次试验,依此类推。

因此,当我只使用一个循环时,它起作用,代码是:

for ii = 1: 10
 a(ii) =load(['omni_AP1_trial_' num2str(ii) '_loc_1.mat']);
end

上面的代码工作正常。所以现在我想用2个循环一个用于位置(jj循环),另一个用于试验次数(ii循环)。我想以这样的方式使用循环:对于我的第一个位置,它将加载10个试验,然后它将加载另外10个试验,依此类推。当我使用这两个循环时,我收到一个错误(意外的matlab运算符)。不知道出了什么问题。我不确定我使用的逻辑是否正确。如果逻辑是正确的,那么当我使用2个循环加载所有文件时,上面的代码有什么问题?