我有一堆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个字段中的第七行吗?
还是我需要从一开始就加载不同的文件?
答案 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{:});