【问题标题】:Loading multiple datasets without overwriting variable加载多个数据集而不覆盖变量
【发布时间】:2014-01-27 06:05:55
【问题描述】:

我有一个包含许多文件的文件夹,名为:

filename_1.mat
filename_2.mat
.
.
.
filename_n.mat

每个文件都包含一个名为 Var 的数据集,具有相同的列。我想将所有这些数据集加载到工作区并使用vertcat() 垂直连接它们,但是当我在for循环中加载它们时,我只得到最后一个数据集,因为变量Var 被覆盖。这些数据集是在 for 循环中创建的:

% generate filenames

tss = arrayfun(@(x){sprintf('filename_%d',x)},1:(length(1:3)))';
namerr = cell((length(1:3)),1);
namerr(:,1) = {'E:\FILES\'};
file_names = strcat(namerr,tss,'.mat');

% create datasets and save them to E:\FILES 

for ii = 1:3
    a = rand(1,5)';
    b = rand(1,5)';
    Var = dataset({[a,b],'a_name','b_name'});
    save(file_names{(ii)},'Var','-v6')
end

% Now read these datasets into workspace and concatenate vertically??
% Is there a way for me to name the datasets `Var_1...Var_n`
% so they are not overwritten? 

【问题讨论】:

    标签: matlab variables file-io


    【解决方案1】:

    当然。您可以将数据加载到变量中,然后将文件的内容作为变量中的字段来访问。从你的例子开始,这看起来像这样:

    loadedData_1 = load(file_names{1})
    loadedData_2 = load(file_names{2})
    loadedData_3 = load(file_names{3})
    
    mergedData = [...
        loadedData_1.Var; ...
        loadedData_2.Var; ...        
        loadedData_3.Var   ];
    

    您可以使用循环来清理它:

    for ix = 3:-1:1   %Load all data, backwards to force preallocation
        loadedData(ix) = load(file_names{ix});
    end
    mergedData = cat(1,loadedData.Var);
    

    或者,如果您真的想超越顶峰,我认为您可以使用arrayfun 排长队完成,但这可能会超越顶峰。

    【讨论】:

      【解决方案2】:

      直接在循环中执行会容易得多:

      ...
      Varcat = [];
      for ii = 1:3
          a = rand(1,5)';
          b = rand(1,5)';
          Var = dataset({[a,b],'a_name','b_name'});
          Varcat = [Varcat; Var];
          save(file_names{(ii)},'Var','-v6')
      end
      
      Var = Varcat;
      

      如果您真的想在以后或在程序的另一部分执行此操作,希望您清楚如何使用load() 为类似的循环调整相同的方法。

      【讨论】:

        猜你喜欢
        • 2018-07-15
        • 2021-06-30
        • 1970-01-01
        • 2018-02-22
        • 1970-01-01
        • 1970-01-01
        • 2010-11-17
        • 1970-01-01
        • 2013-03-15
        相关资源
        最近更新 更多