2016-09-14 117 views
-1

我在Matlab中使用findpeaks方法來查找峯值。我有一個矩陣(峯值)260x601,其中260個不同的試驗超過601個時間點。我有一個單獨的實際時間向量(稱爲TimeVec)。如何構建不同維度的單元陣列或矩陣

我正在使用for循環來循環試驗。

for i = 1:size(Peak,1) 
    [pks(i),locs(i)]=findpeaks(Peak(i,:),timeVec,'MinPeakHeight',1); 
end 

問題是,每個試驗可能有不同數量的峯值,因此它試圖將不同數量的列組合到每個迭代中。我怎樣才能解決這個問題?

+0

閱讀[cell array documentation](http://www.mathworks.com/help/matlab/cell-arrays.html) – excaza

回答

1

這是一個簡短的,而不是完全有效的方法:

fp = @(k) findpeaks(Peak(k,:),timeVec,'MinPeakHeight',1); 
[pks,locs] = arrayfun(fp,1:size(Peak,1),'UniformOutput',false); 

這將是一個for循環快一點,但它值得改變這個只有當你有更多的數據:

[pks,locs] = deal(cell(size(Peak,1),1)); 
for k = 1:size(Peak,1) 
    [pks{k},locs{k}] = findpeaks(Peak(k,:),timeVec,'MinPeakHeight',1); 
end 

進一步操作,使用@excaza建議並閱讀單元格陣列文檔。