2
我已經將一組50個文件加載到matlab工作空間中。 (從data1
到data50
)。 每一個的大小是721*176
。我只想提取每個數據的前144行並將其存儲在另一個數據中。同時在matlab中處理多個數據
例如:
newData1 = data1(1:144,:);
我的問題是:我怎樣才能做到這一點使用一個循環,一次處理所有的數據?
我已經將一組50個文件加載到matlab工作空間中。 (從data1
到data50
)。 每一個的大小是721*176
。我只想提取每個數據的前144行並將其存儲在另一個數據中。同時在matlab中處理多個數據
例如:
newData1 = data1(1:144,:);
我的問題是:我怎樣才能做到這一點使用一個循環,一次處理所有的數據?
這取決於您如何存儲數據。
在你的情況下,最好的辦法是三維數組:
首先,分配陣列(如@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
總是值得的,如果尺寸預先已知的,在這種情況下創建零陣列,'數據=零(721,176,50)',然後加載它你建議。 –
@HighPerformanceMark,我完全同意你 –
非常感謝。這真的很有幫助 –