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

The iпервая страница выхода 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

The iпервая страница выхода 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)

2-D

3-D

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

3-D

2-D

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

Н-Д

Н-Д

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