Main Content

ind2sub

線形インデックスから添字への変換

説明

[row,col] = ind2sub(sz,ind) は、サイズ sz の行列について、線形インデックス ind に対応する等価の行と列の添字を含む配列 row と配列 col を返します。ここで、sz は 2 要素ベクトルで、sz(1) は行数、sz(2) は列数を指定します。

[I1,I2,...,In] = ind2sub(sz,ind) は、サイズ sz の多次元配列について、線形インデックス ind に対応する等価の多次元添字を含む n 個の配列 I1,I2,...,In を返します。ここで、sz は、配列の各次元のサイズを指定する n 要素ベクトルです。

すべて折りたたむ

線形インデックス [3 4 5 6] を 3 行 3 列の行列の行と列の添字に変換します。線形インデックスから添字 (位置によるインデックス付け) へのマッピングを以下に示します。

入力ベクトルを作成し、変換を実行します。

ind = [3 4 5 6];
sz = [3 3];
[row,col] = ind2sub(sz,ind)
row = 1×4

     3     1     2     3

col = 1×4

     1     2     2     2

線形インデックス [3 4 5 6] を 2×2×2 の配列の添字に変換します。線形インデックスから 2×2×2 の配列の添字 (位置によるインデックス付け) へのマッピングは、以下のように表すことができます。

入力ベクトルを作成し、変換を実行します。

ind = [3 4 5 6];
sz = [2 2 2];
[I1,I2,I3] = ind2sub(sz,ind)
I1 = 1×4

     1     2     1     2

I2 = 1×4

     2     2     1     1

I3 = 1×4

     1     1     2     2

3 次元配列の線形インデックスを添字インデックスに変換します。

配列を作成し、配列の 14 番目の要素に対応する添字インデックスを求めます。

A = rand(3,4,2);
[row,col,page] = ind2sub(size(A),14)
row = 2
col = 1
page = 2

両方のバージョンのインデックスが配列の同じ要素を指していることを確認します。

A(14)
ans = 0.4854
A(row,col,page)
ans = 0.4854

N 次元配列に ind2sub を使用する場合、通常は行列の各次元に N 個の出力引数を指定します。この例は、3 次元配列について 3 個より少ない出力引数を返すようにした場合、異なる結果を示します。

サイズが 2×2×2 の 3 次元配列について、1 ~ 8 の線形インデックスを変換するために必要な入力引数を作成します。

ind = 1:8;
sz = [2 2 2];

ind2sub を使用して 2×2×2 の配列の行、列およびページを返すときの 3 つの出力引数を指定します。

[row,col,page] = ind2sub(sz,ind)
row = 1×8

     1     2     1     2     1     2     1     2

col = 1×8

     1     1     2     2     1     1     2     2

page = 1×8

     1     1     1     1     2     2     2     2

出力引数を 2 つのみ指定した場合、ind2sub は配列の 3 番目の次元を無視して、その代わりにサイズが 2 行 4 列の 2 次元配列の添字を返します。

[row,col] = ind2sub(sz,ind)
row = 1×8

     1     2     1     2     1     2     1     2

col = 1×8

     1     1     2     2     3     3     4     4

出力引数を 1 つのみ指定した場合、ind2sub は配列の 2 番目と 3 番目の次元を無視して、その代わりにサイズが 1 行 8 列の 1 次元配列の添字を返します。

row = ind2sub(sz,ind)
row = 1×8

     1     2     3     4     5     6     7     8

入力引数

すべて折りたたむ

配列のサイズ。正の整数のベクトルとして指定します。このベクトルの各要素は対応する次元のサイズを示します。たとえば、[2 3 4] は 2×3×4 の配列を定義します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

線形インデックス。スカラー、ベクトル、行列または多次元配列として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力引数

すべて折りたたむ

行の添字。スカラー、ベクトル、行列または多次元配列として返されます。row のサイズは、入力 ind と同じサイズです。

データ型: double

列の添字。スカラー、ベクトル、行列または多次元配列として返されます。col のサイズは、入力 ind と同じサイズです。

データ型: double

多次元の添字。スカラー、ベクトル、行列または多次元配列として返されます。各配列 I1,I2,…,In のサイズは、入力 ind と同じサイズです。

データ型: double

ヒント

  • 行列 A について、特定の条件を満たす行列要素の線形インデックスを取得するには、出力引数を 1 つ指定して関数 find を使用できます。添字インデックスを取得するには、出力引数を 2 つ指定して関数 find を使用します。たとえば、[row,col] = ind2sub(size(A),find(A>5))[row,col] = find(A>5) と同じ結果になります。

アルゴリズム

配列 A について、[I1,…,In] = ind2sub(size(A),ind) である場合、すべての k について A(I1(k),…,In(k)) = A(ind(k)) です。

拡張機能

バージョン履歴

R2006a より前に導入