4

我想计算一个 N×N...×N 数组的最大值,更重要的是它的坐标,而不指定它的尺寸。

例如,让我们采取:

A = [2 3];
B = [2 3; 3 4];

该函数(让我们调用它MAXI)应该为 matrix 返回以下值A

[fmax, coor] = MAXI(A)

fmax =
   3

coor =
   2

对于矩阵B

[fmax, coor] = MAXI(B)

fmax =
    4

coor=
    2   2

主要问题不是开发一个特别适用于一个类的代码,而是开发一个尽可能快地适用于任何输入(具有更高维度)的代码。

4

1 回答 1

8

要找到绝对最大值,您必须先将输入矩阵转换为列向量并找到最大元素的线性索引,然后将其转换为坐标ind2sub。不过,这可能有点棘手,因为ind2sub需要指定已知数量的输出变量。为此,我们可以使用元胞数组和逗号分隔列表,如下所示:

[fmax, coor] = max(A(:));
if ismatrix(A)
    C = cell(1:ndims(A));
    [C{:}] = ind2sub(size(A), coor);
    coor = cell2mat(C);
end

编辑:我添加了一个附加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

例子

A = [2 3; 3 4];
[fmax, coor] = maxi(A)

fmax =
    4

coor =
    2    2
于 2013-01-03T13:19:50.177 回答