我已将一组50个文件加载到matlab工作空间中。 (从data1
到data50
)。
每个的大小为721*176
。我想只提取每个数据的前144行并将其存储在另一个数据中。
例如:
newData1 = data1(1:144,:);
我的问题是:如何使用循环一次处理所有数据?
答案 0 :(得分:1)
这取决于您存储数据的方式。
您的情况下最好的方法是3D阵列:
首先,分配数组(正如@HighPerformanceMark指出的那样):
data = zeroes(721,176,50);
然后,用值填充它:
data(:,:,1) = read('firstFile.bmp');
data(:,:,2) = read('secondFile.bmp');
...
data(:,:,50) = ...
在这种情况下,只需使用以下选项:
data(1:144,:,:)
存储数据的另一种可行方法是单元阵列。它非常有用,因为3D数组无法处理不同大小的矩阵。
data{1} = read('firstFile.bmp');
data{2} = read('secondFile.bmp');
...
在这种情况下,请使用cellfun
:
selection = cellfun(@(x) {x(1:144,:)}, data);
如果您仍然坚持将数据存储在单独的变量而不是数组中,则可以使用eval
。这是最不推荐的方式。
for i=1:50
eval(' selection{i} = data%d',i)
end