Векторизация (математика)

редактировать

В математике, особенно в линейной алгебры и теории матриц, векторизация матрицы - это линейное преобразование, которое преобразует матрицу в вектор-столбец. В частности, векторизация матрицы A am × n, обозначаемая vec (A), представляет собой вектор-столбец mn × 1, полученный путем наложения столбцов матрицы A друг на друга:

vec (A) = [a 1, 1,…, am, 1, a 1, 2,…, am, 2,…, a 1, n,…, am, n] T {\ displaystyle \ mathrm {vec} (A) = [a_ {1, 1}, \ ldots, a_ {m, 1}, a_ {1,2}, \ ldots, a_ {m, 2}, \ ldots, a_ {1, n}, \ ldots, a_ {m, n} ] ^ {\ mathrm {T}}}{\ displaystyle \ mathrm {vec} (A) = [a_ {1,1}, \ ldots, a_ {m, 1}, a_ {1,2}, \ ldots, a_ {m, 2}, \ ldots, a_ {1, n}, \ ldots, a_ {m, n}] ^ {\ mathrm {T}}}

Здесь ai, j {\ displaystyle a_ {i, j}}a_{i,j}представляет A (i, j) {\ displaystyle A (i, j)}{\ displaystyle A (i, j)} , а верхний индекс T {\ displaystyle {} ^ {\ mathrm {T}}}{\ displaystyle {} ^ {\ mathrm {T}}} обозначает транспонирование. Векторизация выражает через координаты изоморфизм R m × n: = R m ⊗ R n ≅ R mn {\ displaystyle \ mathbf {R} ^ {m \ times n}: = \ mathbf {R} ^ {m} \ otimes \ mathbf {R} ^ {n} \ cong \ mathbf {R} ^ {mn}}\ mathbf {R} ^ {m \ times n}: = \ mathbf {R} ^ {m} \ otimes \ mathbf {R} ^ {n} \ cong \ mathbf {R} ^ {mn} между ними (т. Е. Матриц и векторов) как векторные пространства.

Например, для матрицы 2 × 2 A {\ displaystyle A}A = [abcd] {\ displaystyle {\ begin {bmatrix} a b \\ c d \ end {bmatrix}}}{\ begin {bmatrix} a b \\ c d \ end {bmatrix}} векторизация: vec (A) = [acbd] {\ displaystyle \ mathrm {vec} (A) = {\ begin {bmatrix} a \\ c \\ b \\ d \ end {bmatrix}}}\ mathrm {vec } (A) = {\ begin {bmatrix} a \\ c \\ b \\ d \ end {bmatrix}} .

Содержание

  • 1 Совместимость с продуктами Kronecker
  • 2 Совместимость с продуктами Hadamard
  • 3 Совместимость с внутренними продуктами
  • 4 Векторизация в виде линейной суммы
  • 5 Полувекторизация
  • 6 Язык программирования
  • 7 Примечания
  • 8 См. Также
  • 9 Ссылки

Совместимость с продуктами Kronecker

Векторизация часто используется вместе с продуктом Kronecker для выражения умножения матриц как линейного преобразования матриц. В частности,

vec (ABC) = (CT ⊗ A) vec (B) {\ displaystyle {\ text {vec}} (ABC) = (C ^ {\ mathrm {T}} \ otimes A) {\ text {vec}} (B)}{\ displaystyle {\ text {vec} } (ABC) = (C ^ {\ mathrm {T}} \ otimes A) {\ text {vec}} (B)}

для матриц A, B и C размеров k × l, l × m и m × n. Например, если ad A (X) = AX - XA {\ displaystyle {\ text {ad}} _ {A} (X) = AX-XA}{\ displaystyle {\ text {ad}} _ {A} (X) = AX-XA} (присоединенный эндоморфизм алгебры Ли gl (n, C ) всех матриц размера n × n с комплексными элементами), затем vec (ad A (X)) = (I n ⊗ A - AT ⊗ I n) vec (X) {\ displaystyle {\ text {vec}} ({\ text {ad}} _ {A} (X)) = (I_ {n} \ otimes AA ^ {\ mathrm {T}} \ otimes I_ {n}) {\ text {vec}} (X)}{\ displaystyle {\ text {vec}} ({\ text {ad}} _ {A} (X)) = (I_ {n} \ otimes AA ^ {\ mathrm {T}} \ otimes I_ {n}) {\ text {vec}} (X)} , где I n {\ displaystyle I_ { n}}I_ {n} - это единичная матрица n × n .

Есть еще две полезные формулировки:

vec (ABC) = (I n ⊗ AB) vec (C) = (CTBT ⊗ Я К) vec (A) {\ displaystyle {\ text {vec}} (ABC) = (I_ {n} \ otimes AB) {\ text {vec}} (C) = (C ^ {\ mathrm {T }} B ^ {\ mathrm {T}} \ otimes I_ {k}) {\ text {vec}} (A)}{\ displaystyle {\ text {vec}} (ABC) = (I_ {n} \ otimes AB) {\ text {vec}} (C) = (C ^ {\ mathrm {T} } B ^ {\ mathrm {T}} \ otimes I_ {k}) {\ text {vec}} (A)}
vec (AB) = (I m ⊗ A) vec (B) = (BT ⊗ Я К) vec (A) {\ displaystyle {\ text {vec}} (AB) = (I_ {m} \ otimes A) {\ text {vec}} (B) = (B ^ {\ mathrm {T }} \ otimes I_ {k}) {\ text {vec}} (A)}{\ displaystyle {\ text {vec}} (AB) = (I_ {m} \ otimes A) {\ text {vec}} (B) = (B ^ {\ mathrm {T}} \ otimes I_ {k}) {\ text {vec}} (A)}

В более общем плане было показано, что векторизация - это самоприсоединение в моноидальной замкнутой структуре любой категории матриц.

Совместимость с произведениями Адамара

Векторизация - это гомоморфизм алгебр из пространства n × n матриц с Произведение Адамара (начальное) на C на его произведение Адамара:

vec (A ∘ B) = vec (A) ∘ vec (B). {\ displaystyle \ mathrm {vec} (A \ circ B) = \ mathrm {vec} (A) \ circ \ mathrm {vec} (B).}{\ displaystyle \ mathrm {vec} (A \ circ B) = \ mathrm {vec} (A) \ circ \ mathrm { vec} (B).}

Совместимость с внутренними продуктами

Векторизация - это унитарное преобразование из пространства матриц размера n × n со скалярным произведением Фробениуса (или Гильберта – Шмидта ) в C:

tr (A ⊤ B) = vec (A) ⊤ vec (B) = vec (B ⊤) ⊤ vec (A). {\ displaystyle \ mathrm {tr} (A ^ {\ top} B) = \ mathrm {vec} (A) ^ {\ top} \ mathrm {vec} (B) = \ mathrm {vec} (B ^ {\ top}) ^ {\ top} \ mathrm {vec} (A).}{\ displaystyle \ mathrm {tr} (A ^ {\ top} B) = \ mathrm {vec} (A) ^ {\ top} \ mathrm {vec} (B) = \ mathrm {vec} (B ^ {\ top}) ^ {\ top} \ mathrm {vec} (A). }

где верхний индекс обозначает сопряженное транспонирование.

Векторизация как линейная сумма

Операция векторизации матрицы может быть записанным в виде линейной суммы. Пусть X будет матрицей размера m × n, которую мы хотим векторизовать, и пусть eiбудет i-м каноническим базисным вектором для n-мерного пространства, то есть ei = [0,..., 0, 1, 0,..., 0] T {\ textstyle \ mathbf {e} _ {i} = \ left [0,..., 0,1,0,..., 0 \ right] ^ {T}}{\ textstyle \ mathbf {e} _ {i} = \ left [0,..., 0,1,0,..., 0 \ right ] ^ {T}} . Пусть Biбудет блочной матрицей (mn) × m, определенной следующим образом:

B i = [0 ⋮ 0 I m 0 ⋮ 0] = ei ⊗ I m {\ displaystyle \ mathbf {B} _ {i} = {\ begin {bmatrix} \ mathbf {0} \\\ vdots \\\ mathbf {0} \\\ mathbf {I} _ {m} \\\ mathbf {0} \\\ vdots \\\ mathbf { 0} \ end {bmatrix}} = \ mathbf {e} _ {i} \ otimes \ mathbf {I} _ {m}}{\ displaystyle \ mathbf {B} _ {i} = {\ begin {bmatrix} \ mathbf {0} \\\ vdots \\\ mathbf {0} \\\ mathbf {I} _ { m} \\\ mathbf {0} \\\ vdots \\\ mathbf {0} \ end {bmatrix}} = \ mathbf {e} _ {i} \ otimes \ mathbf {I} _ {m}}

Biсостоит из n блочных матриц размером m × m, составленных по столбцам, и все эти матрицы нулевые, за исключением i-й, которая представляет собой единичную матрицу am × m Im.

Тогда векторизованная версия X может быть выражена следующим образом:

vec (X) Знак равно ∑ я знак равно 1 N В я Икс ei {\ displaystyle {\ text {vec}} (\ mathbf {X}) = \ sum _ {i = 1} ^ {n} \ mathbf {B} _ {i} \ mathbf {X} \ mathbf {e} _ {i}}{\ displaystyle {\ text {vec}} (\ mathbf { X}) = \ sum _ {i = 1} ^ {n} \ mathbf {B} _ {i} \ mathbf {X} \ mathbf {e} _ {i}}

Умножение X на eiизвлекает i-й столбец, а умножение на Biпомещает его в нужную позицию в окончательный вектор.

В качестве альтернативы линейная сумма может быть выражена с помощью произведения Кронекера :

vec (X) = ∑ i = 1 nei ⊗ X ei {\ displaystyle {\ text {vec}} (\ mathbf {X}) = \ sum _ {i = 1} ^ {n} \ mathbf {e} _ {i} \ otimes \ mathbf {X} \ mathbf {e} _ {i}}{\ displaystyle {\ text {vec}} (\ mathbf {X}) = \ sum _ {i = 1} ^ {n} \ mathbf {e} _ {я} \ otimes \ mathbf {X} \ mathbf {e} _ {i}}

Полувекторизация

Для симметричной матрицы A вектор vec (A) содержит больше информации, чем это строго необходимо, поскольку матрица полностью определяется симметрией вместе с нижним треугольником, то есть n (n + 1) / 2 записей на и ниже главной диагонали . Для таких матриц полувекторизация иногда бывает более полезной, чем векторизация. Полувекторизация, vech (A), симметричной матрицы A размера n × n представляет собой вектор-столбец n (n + 1) / 2 × 1, полученный векторизацией только нижней треугольной части матрицы A:

vech (A) = [A 1,1,..., A n, 1, A 2,2,..., A n, 2,..., A n − 1, n − 1, A n, n − 1, A n, n ].

Например, для матрица 2 × 2 A = [abbd] {\ displaystyle {\ begin {bmatrix} a b \\ b d \ end {bmatrix}}}{\ begin {bmatrix} a b \\ b d \ end {bmatrix}} , полу-векторизация - vech (A) = [abd] {\ displaystyle {\ begin {bmatrix} a \\ b \\ d \ end {bmatrix}}}{\ begin {bmatrix} a \\ b \\ d \ конец {bmatrix}} .

Существуют уникальные матрицы, преобразующие полу-векторизацию матрицы в ее векторизацию и наоборот. называемые, соответственно, матрицей дублирования и матрицей исключения.

Язык программирования

Языки программирования, реализующие матрицы, могут иметь простые средства для векторизации. В Matlab / GNU Octave матрица Aможет быть векторизована с помощью A (:). GNU Octave также позволяет векторизацию и полу-векторизацию с помощью vec (A)и vech (A)соответственно. Джулия также имеет функцию vec (A). В массивах Python NumPy реализован метод 'flatten', в то время как в R желаемый эффект может быть достигнут с помощью c ()или as.vector ()функции. В R функция vec ()пакета 'ks' допускает векторизацию, а функция vech (), реализованная в обоих пакетах 'ks' и 'sn', позволяет половину -векторизация.

Примечания

1. Идентификатор для векторизации основной строки: vec (ABC) = (A ⊗ CT) vec (B) {\ displaystyle {\ text {vec}} (ABC) = (A \ otimes C ^ {\ mathrm {T }}) {\ text {vec}} (B)}{\ displaystyle {\ text {vec}} (ABC) = (A \ otimes C ^ {\ mathrm {T}}) {\ text {vec}} (B)} .

См. также

Ссылки

  • Jan R Магнус и Хайнц Нойдекер (1999), Матричное дифференциальное исчисление с приложениями в статистике и эконометрике, 2-е изд., Wiley. ISBN 0-471-98633-X.
Последняя правка сделана 2021-06-18 10:29:04
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте