ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

多次元配列の操作

この例では、2 次元よりも大きい配列の操作の方法を示します。多次元配列は数値、文字、セル、構造体の配列にすることができます。

多次元配列は、多変量データを表すために使うことが可能です。MATLAB では、多次元配列を直接サポートする多数の関数を用意しています。

多次元配列の作成

MATLAB の多次元配列は、2 次元配列と同じ方法で作成されます。たとえば、まず 3 行 3 列の行列を定義し、3 番目の次元を加えます。

A = [5 7 8;
     0 1 9;
     4 3 6];
A(:,:,2) = [1 0 4;
            3 5 6;
            9 8 7]
A(:,:,1) =

     5     7     8
     0     1     9
     4     3     6


A(:,:,2) =

     1     0     4
     3     5     6
     9     8     7

関数 cat は多次元配列の作成に便利なツールです。B = cat(DIM,A1,A2,...) は、次元 DIM に沿って A1、A2 ... を結合することで多次元配列を構築します。

B = cat( 3, [2 8; 0 5], [1 3; 7 9], [2 3; 4 6])
B(:,:,1) =

     2     8
     0     5


B(:,:,2) =

     1     3
     7     9


B(:,:,3) =

     2     3
     4     6

CAT の呼び出しは入れ子にできます。

A = cat(3,[9 2; 6 5], [7 1; 8 4]);
B = cat(3,[3 5; 0 1], [5 6; 2 1]);
C = cat(4,A,B,cat(3,[1 2; 3 4], [4 3; 2 1]));

次元の検出

SIZE や NDIMS は、行列のサイズや次元数を返します。

SzA   = size(A)
DimsA = ndims(A)
SzC   = size(C)
DimsC = ndims(C)
SzA =

     2     2     2


DimsA =

     3


SzC =

     2     2     2     3


DimsC =

     4

要素へのアクセス

多次元配列の 1 つの要素にアクセスするには、整数の添字を使います。たとえば、前のスライドで定義した D を使って D(1,2,2,22) とすると、6 を返します。

配列の添字は、ベクトルにすることもできます。以下に例を示します。

K = C(:,:,1,[1 3])
K(:,:,1,1) =

     9     2
     6     5


K(:,:,1,2) =

     1     2
     3     4

多次元配列の操作

RESHAPE、PERMUTE、SQUEEZE は、n 次元配列を操作するために使用されます。RESHAPE は、2 次元配列の場合と同じように動作します。PERMUTE の処理を以下に示します。

A を 3 x 3 x 2 の配列とします。PERMUTE(A,[2 1 3]) は (次元 1 は行で、次元 2 は列、次元 3 は深さ・・・として) 行と列の添字を反対にした配列を返します。同様に、PERMUTE(A,[3,2,1]) は、1 番目と 3 番目の添字を入れ替えた配列を返します。

A = rand(3,3,2);
B = permute(A, [2 1 3]);
C = permute(A, [3 2 1]);

多次元配列から 2 次元行列を選択

平面や 2 次元行列上で機能する EIG のような関数は、引数として多次元配列を受け入れません。そのような関数を多次元配列のさまざまな平面に適用するには、インデックスまたは FOR ループを使用します。以下に例を示します。

A = cat( 3, [1 2 3; 9 8 7; 4 6 5], [0 3 2; 8 8 4; 5 3 5], ...
                 [6 4 7; 6 8 5; 5 4 3]);
% The EIG function is applied to each of the horizontal 'slices' of A.
for i = 1:3
    eig(squeeze(A(i,:,:)))
end
ans =

   10.3589
   -1.0000
    1.6411


ans =

  21.2293 + 0.0000i
   0.3854 + 1.5778i
   0.3854 - 1.5778i


ans =

  13.3706 + 0.0000i
  -1.6853 + 0.4757i
  -1.6853 - 0.4757i

INTERP3、INTERPN、NDGRID は、特に多次元データに対して機能する内挿やデータのグリッドを行う関数の例です。NDGRID を N 次元行列に適用する例を示します。

x1 = -2*pi:pi/10:0;
x2 = 2*pi:pi/10:4*pi;
x3 = 0:pi/10:2*pi;
[x1,x2,x3] = ndgrid(x1,x2,x3);
z = x1 + exp(cos(2*x2.^2)) + sin(x3.^3);
slice(z,[5 10 15], 10, [5 12]); axis tight;

多次元のセル配列と多次元の構造体配列を作成することができます。また、多次元の数値配列とセル配列間の変換を行うことも可能です。

詳細は、MATLAB のドキュメンテーションの多次元配列についての項目を参照してください。

この情報は役に立ちましたか?