Bre*_*gem 4 arrays matlab max matrix
我想计算最大值,更重要的是,计算N-by-N ... by-N数组的坐标,而不指定其尺寸.
例如,我们采取:
A = [2 3];
B = [2 3; 3 4];
Run Code Online (Sandbox Code Playgroud)
函数(让我们调用它MAXI)应该返回矩阵的以下值A:
[fmax, coor] = MAXI(A)
fmax =
3
coor =
2
Run Code Online (Sandbox Code Playgroud)
对于矩阵B:
[fmax, coor] = MAXI(B)
fmax =
4
coor=
2 2
Run Code Online (Sandbox Code Playgroud)
主要问题不是开发一个特别适用于某个类的代码,而是开发一个尽可能快地适用于任何输入(具有更高维度)的代码.
要找到绝对最大值,您必须先将输入矩阵转换为列向量,然后找到最大元素的线性索引,然后将其转换为坐标ind2sub.这可能有点棘手,因为ind2sub需要指定已知数量的输出变量.为此,我们可以使用单元格数组和逗号分隔列表,如下所示:
[fmax, coor] = max(A(:));
if ismatrix(A)
C = cell(1:ndims(A));
[C{:}] = ind2sub(size(A), coor);
coor = cell2mat(C);
end
Run Code Online (Sandbox Code Playgroud)
编辑:我添加了一个额外的if语句,检查输入是矩阵还是向量,如果是后者,它会按原样返回线性索引.
在函数中,它看起来像这样:
function [fmax, coor] = maxi(x)
[fmax, coor] = max(A(:));
if ismatrix(A)
C = cell(1:ndims(A));
[C{:}] = ind2sub(size(A), coor);
coor = cell2mat(C);
end
Run Code Online (Sandbox Code Playgroud)
A = [2 3; 3 4];
[fmax, coor] = maxi(A)
fmax =
4
coor =
2 2
Run Code Online (Sandbox Code Playgroud)