在for循环matlab中实现findpeaks

Implementing findpeaks in for loop matlab

我已经编写了以下代码来计算局部最大值及其在 for 循环中的位置,但我收到一个错误,指出我的维度不匹配。我错过了什么?

这是我的代码:

   for col = 1:3000;
         c1(:,col)=xc(2:end,col);
% matrix xc is my matrix, it could be any random 2d matrix, and for each column i want to implement the findpeaks function

         [cmax(:,col),locs(:,col)]=findpeaks(c1(:,col));

    end

findpeaks 很可能会为您对函数进行的每次调用提供 不同 数量的检测到的峰值和位置。因为你试图切入一个没有参差不齐的矩阵(MATLAB 不支持参差不齐的矩阵),所以你会得到维度不匹配。

一个解决方案可能是改用元胞数组:

%// Declare cell arrays here
cmax = cell(3000,1);
locs = cell(3000,1);
for col = 1:3000;
     c1(:,col)=xc(2:end,col);
     %// Change
     [cmax{col},locs{col}]=findpeaks(c1(:,col));
end

但是,如果您不喜欢使用元胞数组,您要做的是创建一个 NaN 值的矩阵,并且只填充您在每个结果中检测到的最多数量的峰,并且将其余条目保留为 NaN...所以像这样:

%// Declare cmax and locs to be an array of nans
cmax = nan(size(xc));
locs = nan(size(xc));
for col = 1:3000;
     c1(:,col)=xc(2:end,col);
     %// Change
     [c,l]=findpeaks(c1(:,col));
     %// Determine total number of peaks and locations
     N = numel(c);

     %// Populate each column up to this point
     cmax(1:N,:) = c;
     locs(1:N,:) = l;
end