在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
我已经编写了以下代码来计算局部最大值及其在 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