diag
対角行列の作成と行列の対角要素の取得
説明
例
対角行列の作成
1 行 5 列のベクトルを作成します。
v = [2 1 -1 -2 -5];
diag
を使用して、主対角上に v
の要素をもつ行列を作成します。
D = diag(v)
D = 5×5
2 0 0 0 0
0 1 0 0 0
0 0 -1 0 0
0 0 0 -2 0
0 0 0 0 -5
最初の上対角 (k=1
) に v
の要素をもつ行列を作成します。
D1 = diag(v,1)
D1 = 6×6
0 2 0 0 0 0
0 0 1 0 0 0
0 0 0 -1 0 0
0 0 0 0 -2 0
0 0 0 0 0 -5
0 0 0 0 0 0
結果は、6 行 6 列の行列になります。入力として長さ n
のベクトルを指定すると、diag
はサイズが n+abs(k)
の正方行列を返します。
対角要素の取得
6 行 6 列の乱数の行列から主対角要素を取得します。
A = randi(10,6)
A = 6×6
9 3 10 8 7 8
10 6 5 10 8 1
2 10 9 7 8 3
10 10 2 1 4 1
7 2 5 9 7 1
1 10 10 10 2 9
x = diag(A)
x = 6×1
9
6
9
1
7
9
A
の最初の下対角 (k=-1
) の要素を取得します。その結果、主対角より要素が 1 つ少なくなります。
x1 = diag(A,-1)
x1 = 5×1
10
10
2
9
2
diag
を 2 回呼び出すと、元の行列の対角要素からなる対角行列を返します。
A1 = diag(diag(A))
A1 = 6×6
9 0 0 0 0 0
0 6 0 0 0 0
0 0 9 0 0 0
0 0 0 1 0 0
0 0 0 0 7 0
0 0 0 0 0 9
入力引数
v
— 対角要素
ベクトル
ベクトルとして指定する対角要素。v
が N
個の要素をもつベクトルの場合、diag(v,k)
は次数 N+abs(k)
の正方行列になります。
diag([])
は空行列 []
を返します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
複素数のサポート: あり
A
— 入力行列
行列
入力行列。diag
は ndims(A) > 2
の場合はエラーを返します。
diag([])
は空行列 []
を返します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
複素数のサポート: あり
k
— 対角番号
整数
整数として指定する対角番号。k=0
は主対角、k>0
は主対角より上の対角、k<0
は主対角より下の対角を表します。
m 行 n 列の行列の場合、k
の範囲は です。たとえば、n が m より大きい行列の場合、主対角 k=0
は (1,1)
、(2,2)
、... (m,m)
の各インデックスをもつ要素で構成されます。主対角よリ上の k=1
は (1,2)
、(2,3)
、... (m,m+1)
の各インデックスをもつ要素で構成されます。主対角よリ下の k=-1
は (2,1)
、(3,2)
、... (m,m-1)
の各インデックスをもつ要素で構成されます。
ヒント
行列の
trace
は、sum(diag(A))
と等価です。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
k
を指定する場合、実数のスカラー整数値でなければなりません。可変長ベクトルである可変サイズの入力の場合 (1 行 : 列または : 行 1 列)、
diag
は次を実行します。入力をベクトルとして扱います。
指定した対角上に入力ベクトルをもつ行列を返します。
可変長ベクトルでない可変サイズの入力の場合、
diag
は次を実行します。入力を行列として扱います。
実行時にベクトルである入力をサポートしません。
可変長ベクトルを返します。
入力が可変サイズ (:m 行 :n 列) で、実行時の形状が 0 行 0 列の場合、出力は 0 行 0 列ではなく 0 行 1 列です。ただし、入力が一定サイズ 0 行 0 列の場合、出力は
[]
です。可変長ベクトルでない可変サイズの入力の場合 (1 行 : 列または : 行 1 列)、
diag
は入力を対角ベクトル抽出元の行列として処理します。この動作は、入力配列が実行時にベクトルである場合も行われます。diag
が構築する行列が、1 行 : 列または : 行 1 列でない可変サイズの入力に基づくよう設定する場合、diag(x(:))
を次の代わりに使用します。diag(x)
diag(x(:),k)
を次の代わりに使用します。diag(x,k)
ツールボックス関数のコード生成に対する可変サイズの制限 (MATLAB Coder)を参照してください。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意事項および制限事項:
k
を指定する場合、実数のスカラー整数値でなければなりません。可変長ベクトルである可変サイズの入力の場合 (1 行 : 列または : 行 1 列)、
diag
は次を実行します。入力をベクトルとして扱います。
指定した対角上に入力ベクトルをもつ行列を返します。
可変長ベクトルでない可変サイズの入力の場合、
diag
は次を実行します。入力を行列として扱います。
実行時にベクトルである入力をサポートしません。
可変長ベクトルを返します。
入力が可変サイズ (:m 行 :n 列) で、実行時の形状が 0 行 0 列の場合、出力は 0 行 0 列ではなく 0 行 1 列です。ただし、入力が一定サイズ 0 行 0 列の場合、出力は
[]
です。可変長ベクトルでない可変サイズの入力の場合 (1 行 : 列または : 行 1 列)、
diag
は入力を対角ベクトル抽出元の行列として処理します。この動作は、入力配列が実行時にベクトルである場合も行われます。diag
が構築する行列が、1 行 : 列または : 行 1 列でない可変サイズの入力に基づくよう設定する場合、diag(x(:))
を次の代わりに使用します。diag(x)
diag(x(:),k)
を次の代わりに使用します。diag(x,k)
スレッドベースの環境
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)