我已将一组 50 个文件加载到 matlab 工作区中。(从data1
到data50
)。每一个的大小是721*176
。我只想提取每个数据的前 144 行并将其存储在另一个中。
例如:
newData1 = data1(1:144,:);
我的问题是:如何使用循环一次处理所有数据来做到这一点?
这取决于您如何存储数据。
在您的情况下,最好的方法是 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