주요 콘텐츠

pagemtimes

페이지별 행렬 곱셈

설명

Z = pagemtimes(X,Y)는 N차원 배열 XY에 대응되는 페이지의 행렬 곱을 계산합니다. 출력 배열 Z의 각 페이지는 Z(:,:,i) = X(:,:,i)*Y(:,:,i)의 곱으로 계산됩니다.

  • X 또는 Y 중 하나가 행렬인 경우 pagemtimes는 이를 다른 입력값의 각 페이지와 곱합니다. 예를 들어, X가 행렬인 경우 Z(:,:,i) = X*Y(:,:,i)입니다.

  • XY가 3차원보다 많은 차원을 가지는 경우, 첫 두 차원을 제외한 나머지 모든 차원은 호환 가능한 크기를 가져야 합니다. pagemtimes는 페이지 행렬의 모든 조합을 곱하기 위해 추가 차원을 묵시적으로 확장합니다. 즉, Z(:,:,i,j,k) = Xx(:,:,i,j,k)*Yy(:,:,i,j,k)가 됩니다. (추가 차원은 XxYy에서 확장됩니다.)

예제

Z = pagemtimes(X,transpX,Y,transpY)XY의 지정된 전치를 사용하여 행렬 곱을 선택적으로 계산합니다. 이 구문의 경우, 두 전치 옵션을 모두 지정해야 하며, transpXtranspY는 각각 'transpose', 'ctranspose', 'none' 중 하나여야 합니다.

예제

예제

모두 축소

두 개의 3차원 배열을 만들고 대응하는 페이지끼리 곱합니다.

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)의 곱으로 계산됩니다.

행렬 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)의 곱으로 계산됩니다.

두 개의 3차원 배열 XY를 만듭니다. XY의 각 페이지에서 연산 X(:,:,i)'*Y(:,:,i)를 수행하려면 pagemtimes를 사용합니다.

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

이제 XY의 각 페이지에서 연산 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

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

(처음 두 차원 이후에서) 크기가 1인 각 차원은 다른 입력값의 차원 크기와 일치하도록 묵시적으로 확장되며, 출력의 각 페이지 Z(:,:,i,j)X(:,:,i,j)*Y(:,:,i,j)의 곱으로 계산됩니다. 이 연산을 직관적으로 이해하자면, X는 3차원 배열의 페이지로 구성된 두 개의 행렬을 포함하고, Y는 네 번째 차원을 따라 배열된 네 개의 행렬을 포함합니다. 따라서 이 모든 행렬 조합을 곱하면 총 8개의 3×3 행렬이 나옵니다.

입력 인수

모두 축소

입력 배열로, 조밀 행렬 또는 다차원 배열로 지정됩니다. XY의 페이지는 행렬 곱셈(mtimes, *)의 유효한 입력값이어야 합니다.

  • X 또는 Y 중 하나가 행렬인 경우 pagemtimes는 이를 다른 입력값의 각 페이지와 곱합니다. 예를 들어, X가 행렬인 경우 Z(:,:,i) = X*Y(:,:,i)입니다.

  • XY가 3차원보다 많은 차원을 가지는 경우, 첫 두 차원을 제외한 나머지 모든 차원은 호환 가능한 크기를 가져야 합니다. pagemtimes는 페이지 행렬의 모든 조합을 곱하기 위해 추가 차원을 묵시적으로 확장합니다. 즉, Z(:,:,i,j,k) = Xx(:,:,i,j,k)*Yy(:,:,i,j,k)가 됩니다. (추가 차원은 XxYy에서 확장됩니다.)

데이터형: single | double
복소수 지원 여부:

전치 옵션으로, 각각 다음 표에 있는 값 중 하나로 지정됩니다.

설명
'none'전치를 적용하지 않습니다.
'transpose'대응하는 입력값의 각 페이지에 전치를 적용합니다(각 페이지에 transpose 적용됨).
'ctranspose'대응하는 입력값의 각 페이지에 켤레 복소수 전치를 적용합니다(각 페이지에 ctranspose 적용됨).

페이지별로 X'*Y와 같은 연산을 계산하려면 전치 옵션을 사용합니다. 하나의 입력값만 전치하더라도 두 전치 옵션을 모두 지정해야 합니다.

예: pagemtimes(X,'ctranspose',Y,'none')X'*Y의 페이지별 버전을 계산합니다.

데이터형: char | string

출력 인수

모두 축소

출력 배열로, 다차원 배열로 반환됩니다. pagemtimes가 수행하는 연산은 입력값 XY의 크기에 따라 달라집니다.

X의 크기Y의 크기연산

3-D(3차원)

3-D(3차원)

Z(:,:,i) = X(:,:,i)*Y(:,:,i)

2-D(2차원)

3-D(3차원)

Z(:,:,i) = X*Y(:,:,i)

3-D(3차원)

2-D(2차원)

Z(:,:,i) = X(:,:,i)*Y

N차원

N차원

Z(:,:,i,j,k) = X(:,:,i,j,k)*Y(:,:,i,j,k)

Z의 크기는 다음 규칙을 따릅니다.

  • 처음 두 차원에서는 행렬 곱셈 규칙이 적용됩니다. 피연산자 중 하나가 스칼라이면, 결과의 크기는 비 스칼라 피연산자와 같습니다. 두 피연산자가 모두 행렬인 경우, m×n 행렬을 n×q 행렬과 곱하면 m×q 행렬이 됩니다.

  • XY에서 처음 두 차원을 제외한 나머지 호환 가능한 차원은 비한원소 차원과 일치하도록 확장됩니다. 따라서 X가 10×8×1×3이고 Y가 8×10×4×1이면 Z는 10×10×4×3입니다.

세부 정보

모두 축소

  • 실수와 복소수 N차원 배열의 경우, pagemtimes(X,'transpose',X,'none')pagemtimes(X,'none',X,'transpose')는 대칭 행렬 페이지로 구성된 배열을 반환합니다. 복소수 N차원 배열의 경우, pagemtimes(X,'ctranspose',X,'none')pagemtimes(X,'none',X,'ctranspose')는 에르미트 행렬 페이지로 구성된 배열을 반환합니다.

  • pagemtimes를 사용하여 구한 결과는 동일한 각 행렬을 for 루프에서 곱한 결과와 수치적으로 동일합니다. 하지만 부동소수점 반올림 오차로 인해 두 결과가 약간 다를 수 있습니다.

확장 기능

모두 확장

버전 내역

R2020b에 개발됨