pagemtimes

Мудрое страницей умножение матриц

Описание

пример

Z = pagemtimes(X,Y) вычисляет матричное произведение соответствующих страниц массивов N-D X и Y. Каждая страница выходного массива Z дан продуктом: Z(:,:,i) = X(:,:,i)*Y(:,:,i).

  • Если один из X или Y матрица, затем pagemtimes умножает его с каждой страницей другого входа. Например, если X матрица, затем Z(:,:,i) = X*Y(:,:,i).

  • Если X и Y имейте больше, чем три измерения, затем все размерности вне первых двух должны иметь Совместимые Размеры. pagemtimes неявно расширяет дополнительные размерности, чтобы умножить все комбинации разбитых на страницы матриц: Z(:,:,i,j,k) = Xx(:,:,i,j,k)*Yy(:,:,i,j,k). (Дополнительные размерности были расширены в Xx и Yy.)

пример

Z = pagemtimes(X,transpX,Y,transpY) опционально вычисляет матричное произведение с заданными перемещениями X и Y. Для этого синтаксиса необходимо указать, что оба транспонируют опции. transpX и transpY должен каждый быть: 'transpose'ctranspose,', или 'none'.

Примеры

свернуть все

Создайте два трехмерных массива и умножьте соответствующие страницы.

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

iстраница th выхода Z(:,:,i) формируется путем умножения X(:,:,i)*Y(:,:,i).

Создайте матричный A и трехмерный массив Y, и затем умножьте каждую страницу трехмерного массива с матрицей.

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

iстраница th выхода Z(:,:,i) формируется путем умножения A*Y(:,:,i).

Создайте два трехмерных массива X и Y. Используйте pagemtimes выполнять операцию X(:,:,i)'*Y(:,:,i) на каждой странице X и Y.

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(:,:,i)*Y(:,:,i).' на каждой странице X и Y.

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 содержит две матрицы как страницы в трехмерном массиве, и Y содержит четыре матрицы, расположенные по четвертому измерению; таким образом умножение всех комбинаций этих матриц приводит к восьми 3х3 матрицам.

Входные параметры

свернуть все

Входные массивы в виде плотных матриц или многомерных массивов. Страницы X и Y должны быть допустимые входные параметры к матричному произведению (mtimes, *).

  • Если один из X или Y матрица, затем pagemtimes умножает его с каждой страницей другого входа. Например, если X матрица, затем Z(:,:,i) = X*Y(:,:,i).

  • Если X и Y имейте больше, чем три измерения, затем все размерности вне первых двух должны иметь Совместимые Размеры. pagemtimes неявно расширяет дополнительные размерности, чтобы умножить все комбинации разбитых на страницы матриц: Z(:,:,i,j,k) = Xx(:,:,i,j,k)*Yy(:,:,i,j,k). (Дополнительные размерности были расширены в Xx и Yy.)

Типы данных: single | double
Поддержка комплексного числа: Да

Опции перемещения, каждый заданный как одно из значений в этой таблице.

ЗначениеОписание
'none'Не применяйте перемещение.
'transpose'Примените перемещение к каждой странице соответствующего входа (transpose примененный каждая страница).
'ctranspose'Примените комплексно-сопряженное перемещение к каждой странице соответствующего входа (ctranspose примененный каждая страница).

Используйте транспонировать опции, чтобы вычислить операции, такие как X'*Y мудрым страницей способом. Необходимо указать, что оба транспонируют опции, даже если только один вход транспонируется.

Пример: pagemtimes(X,'ctranspose',Y,'none') вычисляет мудрую страницей версию X'*Y.

Типы данных: char | string

Выходные аргументы

свернуть все

Выходной массив, возвращенный как многомерный массив. Операция, выполняемая pagemtimes зависит от размеров входных параметров X и Y:

Размер XРазмер YОперация

3-D

3-D

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

2D

3-D

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

3-D

2D

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

N-D

N-D

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

Размер Z следует этим правилам:

  • В первых двух размерностях применяются правила умножения матриц. Если любой операнд является скаляром, то результат имеет размер нескалярного операнда. Когда оба операнда являются матрицами, умножая m-by-n матрица с n-by-q матричные результаты в m-by-q матрица.

  • Совместимые размерности вне первых двух в X и Y расширены, чтобы совпадать с неодноэлементной размерностью. Таким образом, если X 10 8 1 3 и Y 8 10 4 1, затем Z 10 10 4 3.

Советы

  • Для действительных массивов N-D, pagemtimes(X,'transpose',X,'none') возвращает матрицу с симметричными страницами. Точно так же для комплексных массивов N-D, можно получить симметричные страницы с pagemtimes(X,'ctranspose',X,'none').

Расширенные возможности

Смотрите также

| |

Введенный в R2020b