MATLAB: 多次元配列の最大値・最小値を見付ける

MATLABで配列の最大値・最小値を求めるには、コロンを使って一つのベクトルにしてminやmaxを使います:

[C I] = max(z(:));

上のCには最大値、Iにはベクトル化された配列のインデックスが返ります。

MATLAB answerには2×2の場合の例が書いてありますね。

もっと多次元の場合はどうでしょうか。

>> z = rand(2,2,2,2);
>> z(:)
ans =
    0.8001
    0.4314
    0.9106
    0.1818
    0.2638
    0.1455
    0.1361
    0.8693
    0.5797
    0.5499
    0.1450
    0.8530
    0.6221
    0.3510
    0.5132
    0.4018
>> [C, I] = min(z(:));
>> C
C =
    0.1361
>> I
I =
     7

最小値を取るインデックスはind2subを使います。

配列のサイズ情報から、通し番号になったインデックスからもとの配列のインデックスに変換してくれます。

今の場合は2x2x2x2なので4つのインデックスが必要です:

>> [ii, jj, kk, mm] = ind2sub(size(z), I)
ii =
     1
jj =
     2
kk =
     2
mm =
     1

実際の配列を確認してみましょう:

>> z
z(:,:,1,1) =
    0.8001    0.9106
    0.4314    0.1818
z(:,:,2,1) =
    0.2638    0.1361
    0.1455    0.8693
z(:,:,1,2) =
    0.5797    0.1450
    0.5499    0.8530
z(:,:,2,2) =
    0.6221    0.5132
    0.3510    0.4018

>> z(1,2,2,1)
ans =
    0.1361

たしかに、(1,2,2,1)が0.1361になっていますね。