创建一个庞大的矩阵,从文件中选择特定的行

时间:2019-04-22 19:58:52

标签: matlab matrix

我有一堆mat文件,其中包含以行形式存在的大量数据序列(每个文件7行x 160000个样本)。我需要从某些行创建一个矩阵。

我已使用以下代码加载文件:

files = dir ('*.mat');
data = load (files(1).name);
for k = 2:numel(files);
  data (k) = load (files(k).name);
end 

因此,我将来自mat文件的所有数据整齐地组织在一个结构数组中。 然后,我使用这种代码创建矩阵:

A = [data(1).mydata(7,:); data(2).mydata(7,:); data(3).mydata(7,:); ...
     data(4).mydata(7,:); data(5).mydata(7,:); data(6).mydata(7,:); ...
     data(7).mydata(7,:); data(8).mydata(2,:); data(9).mydata(2,:); ...
     data(10).mydata(2,:)];  %data matrix

但是我有更多的文件,并且当我想创建一个不同的矩阵时,我必须手动更改50-70个数字,并且这段代码变得很庞大,很容易出错。

还有其他方法可以做吗,比如索引我需要前21个字段中的第二行和后21个字段中的第七行吗?

还是我需要从一开始就加载不同的文件?

1 个答案:

答案 0 :(得分:0)

如果每个MAT文件中都有一个变量mydata,我将按以下方式加载它们:

files = dir ('*.mat');
data = cell(numel(files),1);
for k = 1:numel(files);
  tmp = load(files(k).name);
  data{k} = tmp.mydata;
end

现在建立索引要容易一些。

例如,您可以使用cellfun从单元格数组的每个元素中提取第7行:

A = cellfun(@(d)d(7,:),data,'UniformOutput',false');
A = cat(1,A{:});

要从前7个元素中提取第7行,并从其余元素中提取第2行:

A1 = cellfun(@(d)d(7,:),data(1:7),'UniformOutput',false');
A2 = cellfun(@(d)d(2,:),data(8:end),'UniformOutput',false');
A = cat(1,A1{:},A2{:});