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 が N 個の要素をもつベクトルの場合、diag(v,k) は次数 N+abs(k) の正方行列になります。
diag([]) は空行列 [] を返します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
複素数のサポート: あり
入力行列。diag は ndims(A) > 2 の場合はエラーを返します。
diag([]) は空行列 [] を返します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
複素数のサポート: あり
整数として指定する対角番号。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))と等価です。
拡張機能
使用上の注意および制限:
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)
使用上の注意および制限:
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 関数の実行を参照してください。
diag 関数は、GPU 配列を完全にサポートします。GPU 上で関数を実行するには、入力データを gpuArray (Parallel Computing Toolbox) として指定します。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
この関数は分散配列を完全にサポートしています。詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)