Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在MATLAB/Octave中求N维数组中的所有局部极小值_Arrays_Matlab_Octave_Minimum - Fatal编程技术网

Arrays 在MATLAB/Octave中求N维数组中的所有局部极小值

Arrays 在MATLAB/Octave中求N维数组中的所有局部极小值,arrays,matlab,octave,minimum,Arrays,Matlab,Octave,Minimum,我想找到在MATLAB或倍频程中查找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 = [localmi

我想找到在MATLAB或倍频程中查找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
当然,数组的末端需要用不同的条件来处理,但为了简单起见,我忽略了这一点

有没有办法生成一个处理任意维度的函数?我肯定有一个,因为许多用于处理数组的内置函数可以处理任意维度,但我不知道如何处理这个问题。

您可以使用,或者imregionalmax是Matlab中图像处理工具箱的一部分,所以我想不是每个人都可以使用的。这些函数将在n维数组中沿某一维度查找局部极小值,并在这些局部极大值或极小值的位置返回一个布尔数组,该数组的值为1

通过在数据的多个方向上应用此函数,并简单地查找这些布尔数组的交集&、元素和,您可以找到局部峰值的位置

% 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')
您可以使用或IMMAX是Matlab中图像处理工具箱的一部分,所以我想不是每个人都可以使用的。这些函数将在n维数组中沿某一维度查找局部极小值,并在这些局部极大值或极小值的位置返回一个布尔数组,该数组的值为1

通过在数据的多个方向上应用此函数,并简单地查找这些布尔数组的交集&、元素和,您可以找到局部峰值的位置

% 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')

我不确定这是否适用于N-d情况,但我现在没有一个很好的例子来验证这一点。可能值得指出的是,无论isMax=imregionalmaxZ方法是否也可以使用“图像”包使其与倍频程兼容,具有讽刺意味的是,islocalmin没有被改编为倍频程,但imregionalmin已经。我就用immin。谢谢你!我不确定这是否适用于N-d情况,但我现在没有一个很好的例子来验证这一点。可能值得指出的是,无论isMax=imregionalmaxZ方法是否也可以使用“图像”包使其与倍频程兼容,具有讽刺意味的是,islocalmin没有被改编为倍频程,但imregionalmin已经。我就用immin。谢谢你!如果找到区域最小值就足够了,那么图像包上就有了。它适用于任意数量的维度。您知道域中每个维度的边界吗?carandraug,谢谢!我没有意识到这一点。秘书长,尺寸是可变的。为什么我需要提前知道呢?我总是可以找到它的大小。如果找到区域极小值是足够的,有在图像包。它适用于任意数量的维度。您知道域中每个维度的边界吗?carandraug,谢谢!我没有意识到这一点。秘书长,尺寸是可变的。为什么我需要提前知道呢?我总能找到它的尺寸。