2012-10-01 30 views
2

我已經將一組50個文件加載到matlab工作空間中。 (從data1data50)。 每一個的大小是721*176。我只想提取每個數據的前144行並將其存儲在另一個數據中。同時在matlab中處理多個數據

例如:

newData1 = data1(1:144,:); 

我的問題是:我怎樣才能做到這一點使用一個循環,一次處理所有的數據?

回答

1

這取決於您如何存儲數據。

在你的情況下,最好的辦法是三維數組:

首先,分配陣列(如@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 
+1

總是值得的,如果尺寸預先已知的,在這種情況下創建零陣列,'數據=零(721,176,50)',然後加載它你建議。 –

+0

@HighPerformanceMark,我完全同意你 –

+0

非常感謝。這真的很有幫助 –