2016-09-14 121 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建议并阅读单元格阵列文档。