簡體   English   中英

在 MATLAB/Octave 中查找 N 維數組中的所有局部最小值

[英]Find all local minima in an N-dimensional array in MATLAB/Octave

我想找到通用代碼以在 MATLAB 或 Octave 的 N 維數組中找到所有局部最小值。

對於二維數組,一個粗略的想法是

localmin = [];
for i=2:N-1
    for j=2:N-1
        if M(i,j)<=M(i,j+1) && M(i,j)<=M(i,j-1) && M(i,j)<=M(i+1,j) && M(i,j)<=M(i-1,j)
            localmin = [localmin,[i;j]];
        end
    end
end

(當然,數組的末端需要用不同的條件來處理,但為了簡單起見,我忽略了這一點。)

有沒有辦法制作一個可以處理任意尺寸的 function? 我確定有一個,因為許多用於處理 arrays 的內置函數可以處理任意尺寸,但我不知道如何處理。

您可以使用islocalmaxislocalminimregionalmax是 Matlab 中圖像處理工具箱的一部分,所以我想不是每個人都可以使用)。 這些函數將沿着某個維度在 n 維數組中找到局部最小值,並在這些局部最大值或最小值的位置返回一個 boolean 數組。

通過在數據的多個方向上應用此 function,並找到這些 boolean arrays 的交集(只需& ,元素明智and .),您可以找到本地峰值的位置

% generate some data
x = -10:0.1:10;
y = -10:0.1:10;
[X,Y] = meshgrid(x,y); 
Z = cos(X).*sin(Y).*(X+Y);

% determine maxima and minima
% For Matlab without image processing toolbox:
isMax = islocalmax(Z,1) & islocalmax(Z,2); % combine maxima along first dim with second dim
isMin = islocalmin(Z,1) & islocalmin(Z,2);
% Octave with image package and Matlab with image processing toolbox:
isMax = imregionalmax(Z);
isMin = imregionalmin(Z);

% plot
figure(1);clf;
surf(X,Y,Z);
hold on
scatter3(X(isMax), Y(isMax), Z(isMax), 'r', 'filled')
scatter3(X(isMin), Y(isMin), Z(isMin), 'b', 'filled')

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM