ind2sub
線形インデックスから添字への変換
説明
例
線形インデックスから行列の添字への変換
線形インデックス [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 次元配列の添字への変換
線形インデックス [3 4 5 6]
を 2 x 2 x 2 の配列の添字に変換します。線形インデックスから 2 x 2 x 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 次元配列の要素へのアクセス
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
少ない出力引数を指定した ind2sub
の使用
N 次元配列に ind2sub
を使用する場合、通常は行列の各次元に N 個の出力引数を指定します。この例は、3 次元配列について 3 個より少ない出力引数を返すようにした場合、異なる結果を示します。
サイズが 2 x 2 x 2 の 3 次元配列について、1 ~ 8 の線形インデックスを変換するために必要な入力引数を作成します。
ind = 1:8; sz = [2 2 2];
ind2sub
を使用して 2 x 2 x 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
入力引数
sz
— 配列のサイズ
正の整数のベクトル
配列のサイズ。正の整数のベクトルとして指定します。このベクトルの各要素は対応する次元のサイズを示します。たとえば、[2 3 4]
は 2 x 3 x 4 の配列を定義します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ind
— 線形インデックス
スカラー | ベクトル | 行列 | 多次元配列
線形インデックス。スカラー、ベクトル、行列または多次元配列として指定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
出力引数
row
— 行の添字
スカラー | ベクトル | 行列 | 多次元配列
行の添字。スカラー、ベクトル、行列または多次元配列として返されます。row
のサイズは、入力 ind
と同じサイズです。
データ型: double
col
— 列の添字
スカラー | ベクトル | 行列 | 多次元配列
列の添字。スカラー、ベクトル、行列または多次元配列として返されます。col
のサイズは、入力 ind
と同じサイズです。
データ型: double
I1,I2,...,In
— 多次元の添字
スカラー | ベクトル | 行列 | 多次元配列
多次元の添字。スカラー、ベクトル、行列または多次元配列として返されます。各配列 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))
です。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
この関数は tall 配列を完全にサポートしています。詳細については、tall 配列を参照してください。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
最初の引数は有効なサイズ ベクトルでなければなりません。
intmax
個を超える要素をもつ配列のサイズ ベクトルはサポートされません。生成されたコードは
NaN
入力を範囲外として処理し、実行時エラーをスローします。ツールボックス関数のコード生成に対する可変サイズの制限 (MATLAB Coder)を参照してください。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は GPU 配列を完全にサポートしています。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
分散配列
Parallel Computing Toolbox™ を使用して、クラスターの結合メモリ上で大きなアレイを分割します。
この関数は分散配列を完全にサポートしています。詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)