4

次元を指定せずに、N x N ... x N 配列の最大値、さらに重要なことにその座標を計算したいと思います。

たとえば、次のように考えてみましょう。

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

関数 (lets call it MAXI) は、 matrix に対して次の値を返す必要がありますA

[fmax, coor] = MAXI(A)

fmax =
   3

coor =
   2

および行列の場合B:

[fmax, coor] = MAXI(B)

fmax =
    4

coor=
    2   2

主な問題は、特定の 1 つのクラスで機能するコードを開発することではなく、任意の入力 (より高い次元) に対して可能な限り迅速に機能するコードを開発することです。

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 に答える