pagemtimes
説明
は、N 次元配列 Z
= pagemtimes(X
,Y
)X
と Y
の対応するページの行列積を計算します。出力配列 Z
の各ページは、Z(:,:,i) = X(:,:,i)*Y(:,:,i)
の積によって与えられます。
X
またはY
のいずれかが行列である場合、pagemtimes
はそれを他の入力の各ページと乗算します。たとえば、X
が行列の場合、Z(:,:,i) = X*Y(:,:,i)
です。X
およびY
が 3 次元より大きい場合、最初の 2 次元を超える次元はすべて互換性のあるサイズでなければなりません。pagemtimes
は、余分な次元を暗黙的に拡張し、Z(:,:,i,j,k) = Xx(:,:,i,j,k)*Yy(:,:,i,j,k)
のように、ページ付き行列のすべての組み合わせを乗算します (余分な次元はXx
およびYy
で拡張されています)。
例
3 次元配列の乗算
3 次元配列を 2 つ作成し、対応するページを乗算します。
rng default
X = randi([1 6],2,2,3)
X = X(:,:,1) = 5 1 6 6 X(:,:,2) = 4 2 1 4 X(:,:,3) = 6 1 6 6
Y = randi([1 6],2,2,3)
Y = Y(:,:,1) = 6 5 3 1 Y(:,:,2) = 3 5 6 6 Y(:,:,3) = 4 6 1 6
Z = pagemtimes(X,Y)
Z = Z(:,:,1) = 33 26 54 36 Z(:,:,2) = 24 32 27 29 Z(:,:,3) = 25 42 30 72
出力 Z(:,:,i)
の i
番目のページは X(:,:,i)*Y(:,:,i)
を乗算することで得られます。
行列と 3 次元配列の乗算
行列 A
と 3 次元配列 Y
を作成し、3 次元配列の各ページと行列を乗算します。
A = magic(3)
A = 3×3
8 1 6
3 5 7
4 9 2
rng default
Y = randi([1 10],3,3,3)
Y = Y(:,:,1) = 9 10 3 10 7 6 2 1 10 Y(:,:,2) = 10 10 2 2 5 5 10 9 10 Y(:,:,3) = 8 1 7 10 9 8 7 10 8
Z = pagemtimes(A,Y)
Z = Z(:,:,1) = 94 93 90 91 72 109 130 105 86 Z(:,:,2) = 142 139 81 110 118 101 78 103 73 Z(:,:,3) = 116 77 112 123 118 117 136 105 116
出力 Z(:,:,i)
の i
番目のページは A*Y(:,:,i)
を乗算することで得られます。
転置された配列のページの乗算
2 つの 3 次元配列 X
および Y
を作成します。pagemtimes
を使用して、X
および Y
の各ページに対して演算 X(:,:,i)'*Y(:,:,i)
を実行します。
rng default X = rand(3,3,3) + 1i; Y = rand(3,3,3); A = pagemtimes(X,'ctranspose',Y,'none')
A = A(:,:,1) = 0.9350 - 1.2189i 0.6392 - 1.0148i 0.2302 - 0.9668i 0.7894 - 1.2189i 0.6920 - 1.0148i 0.1839 - 0.9668i 0.6316 - 1.2189i 0.4792 - 1.0148i 0.8544 - 0.9668i A(:,:,2) = 1.6427 - 1.9622i 0.4727 - 0.8547i 1.0453 - 1.7476i 1.5794 - 1.9622i 0.5513 - 0.8547i 1.2682 - 1.7476i 1.1025 - 1.9622i 0.5393 - 0.8547i 0.6151 - 1.7476i A(:,:,3) = 1.2393 - 1.5817i 1.4671 - 1.7401i 1.2737 - 1.4974i 0.9995 - 1.5817i 0.9240 - 1.7401i 0.7324 - 1.4974i 1.1504 - 1.5817i 1.2585 - 1.7401i 1.0786 - 1.4974i
次に、X
および Y
の各ページに対して演算 X(:,:,i)*Y(:,:,i).'
を実行します。
B = pagemtimes(X,'none',Y,'transpose')
B = B(:,:,1) = 0.9773 + 1.1444i 0.5902 + 0.7844i 0.6217 + 1.2716i 0.8270 + 1.1444i 0.6670 + 0.7844i 0.7805 + 1.2716i 0.1629 + 1.1444i 0.1793 + 0.7844i 0.8372 + 1.2716i B(:,:,2) = 0.8120 + 1.4948i 0.8387 + 1.5510i 1.3086 + 1.5187i 0.4491 + 1.4948i 0.5983 + 1.5510i 0.4138 + 1.5187i 1.4030 + 1.4948i 1.3871 + 1.5510i 1.3988 + 1.5187i B(:,:,3) = 0.8747 + 1.8788i 0.8246 + 1.8554i 0.6322 + 1.0849i 1.5873 + 1.8788i 1.5648 + 1.8554i 0.9777 + 1.0849i 1.4888 + 1.8788i 1.4839 + 1.8554i 0.8025 + 1.0849i
N 次元配列の乗算
3×3×2 の配列 X
を作成し、それを 3×3×1×4 の配列 Y
と乗算します。結果のサイズは 3×3×2×4 です。
X = ones(3,3,2); A = eye(3); Y = cat(4,A,2*A,3*A,4*A); Z = pagemtimes(X,Y)
Z = Z(:,:,1,1) = 1 1 1 1 1 1 1 1 1 Z(:,:,2,1) = 1 1 1 1 1 1 1 1 1 Z(:,:,1,2) = 2 2 2 2 2 2 2 2 2 Z(:,:,2,2) = 2 2 2 2 2 2 2 2 2 Z(:,:,1,3) = 3 3 3 3 3 3 3 3 3 Z(:,:,2,3) = 3 3 3 3 3 3 3 3 3 Z(:,:,1,4) = 4 4 4 4 4 4 4 4 4 Z(:,:,2,4) = 4 4 4 4 4 4 4 4 4
(最初の 2 次元に続く) サイズが 1 の各次元は、他の入力の次元サイズに一致するように暗黙的に拡張されます。その後、X(:,:,i,j)*Y(:,:,i,j)
を乗算することで、出力 Z(:,:,i,j)
の各ページが形成されます。この演算について直感的に考えると次のようになります。X
には 3 次元配列のページとして 2 つの行列が含まれており、Y には 4 番目の次元に沿って配置された 4 つの行列が含まれています。そのため、これらの行列のすべての組み合わせを乗算することで、3 行 3 列の 8 つの行列になります。
入力引数
X
, Y
— 入力配列
行列 | 多次元配列
入力配列。密行列または多次元配列として指定します。X
と Y
のページは、行列積 (mtimes, *
) にとって有効な入力でなければなりません。
X
またはY
のいずれかが行列である場合、pagemtimes
はそれを他の入力の各ページと乗算します。たとえば、X
が行列の場合、Z(:,:,i) = X*Y(:,:,i)
です。X
およびY
が 3 次元より大きい場合、最初の 2 次元を超える次元はすべて互換性のあるサイズでなければなりません。pagemtimes
は、余分な次元を暗黙的に拡張し、Z(:,:,i,j,k) = Xx(:,:,i,j,k)*Yy(:,:,i,j,k)
のように、ページ付き行列のすべての組み合わせを乗算します (余分な次元はXx
およびYy
で拡張されています)。
データ型: single
| double
複素数のサポート: あり
transpX
, transpY
— 転置オプション
'none'
(既定値) | 'transpose'
| 'ctranspose'
転置オプション。それぞれを次の表のいずれかの値として指定します。
値 | 説明 |
---|---|
'none' | 転置を適用しません。 |
'transpose' | 対応する入力の各ページに対して転置を適用します (transpose を各ページに適用)。 |
'ctranspose' | 対応する入力の各ページに対して複素共役転置を適用します (ctranspose を各ページに適用)。 |
転置オプションを使用して、X'*Y
などの演算をページ単位で計算します。転置されている入力が 1 つしかない場合でも、両方の転置オプションを指定しなければなりません。
例: pagemtimes(X,'ctranspose',Y,'none')
はページ単位バージョンの X'*Y
を計算します。
データ型: char
| string
出力引数
Z
— 出力配列
多次元配列
出力配列。多次元配列として返されます。pagemtimes
により実行される演算は、入力 X
および Y
のサイズによって異なります。
X のサイズ | Y のサイズ | 演算 |
---|---|---|
3-D | 3-D | Z(:,:,i) = X(:,:,i)*Y(:,:,i) |
2-D | 3-D | Z(:,:,i) = X*Y(:,:,i) |
3-D | 2-D | Z(:,:,i) = X(:,:,i)*Y |
N-D | N-D | Z(:,:,i,j,k) = X(:,:,i,j,k)*Y(:,:,i,j,k) |
Z
のサイズは次のルールに従います。
最初の 2 次元では、行列乗算のルールが適用されます。いずれかのオペランドがスカラーである場合、結果のサイズは非スカラーのオペランドのサイズになります。オペランドがどちらも行列である場合、m 行 n 列の行列と n 行 q 列の行列を乗算すると m 行 q 列の行列になります。
X
およびY
の最初の 2 次元を超える互換性のある次元は、大きさが 1 でない次元に一致するように拡張されます。そのため、X
が 10×8×1×3 であり、Y
が 8×10×4×1 である場合、Z
は 10×10×4×3 です。
詳細
配列ページ
pagemtimes
のようなページ単位関数は、多次元配列に配置された 2 次元行列を処理します。たとえば、3 次元配列の 3 番目の次元にある要素は、本のページのように互いの上に積み重なるため、一般に "ページ" と呼ばれています。各ページは関数が演算を行う行列です。
2 次元行列の集合から、4 次元配列または 5 次元配列のような、より高い次元の配列も作成できます。この場合でも、pagemtimes
は配列の基本単位を X(:,:,i,j,k,l)
のような関数が演算を行う 2 次元行列として扱います。
関数 cat
は、行列の集合から多次元配列を作成するのに便利です。関数 zeros
は、多次元配列を事前に割り当てるのに便利です。
ヒント
実数と複素数の両方の N 次元配列では、
pagemtimes(X,'transpose',X,'none')
およびpagemtimes(X,'none',X,'transpose')
は対称行列のページをもつ配列を返します。複素数の N 次元配列では、pagemtimes(X,'ctranspose',X,'none')
およびpagemtimes(X,'none',X,'ctranspose')
はエルミート行列のページをもつ配列を返します。pagemtimes
を使用して得られた結果は、for
ループで同じ行列のそれぞれを乗算することと数値的に等価です。ただし、浮動小数点の丸め誤差のため、2 つの結果が若干異なることがあります。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
転置オプション
transpX
およびtranspY
は定数でなければなりません。コード生成では、この関数について整数と半精度のデータ型はサポートされません。
pagemtimes
に渡される入力配列は非スパースでなければなりません。コード生成では、関数
pagemtimes
についてページ以外の次元に沿った配列入力の暗黙的な拡張をサポートしています。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意事項および制限事項:
転置オプション
transpX
およびtranspY
は定数でなければなりません。コード生成では、この関数について整数と半精度のデータ型はサポートされません。
pagemtimes
に渡される入力配列は非スパースでなければなりません。コード生成では、関数
pagemtimes
についてページ以外の次元に沿った配列入力の暗黙的な拡張をサポートしています。
スレッドベースの環境
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)を参照してください。
バージョン履歴
R2020b で導入
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)