El producto tensorial (también conocido como producto externo) es una operación binaria que toma dos tensores (por ejemplo, vectores o matrices) y produce un nuevo tensor de mayor rango. El producto tensorial se puede aplicar en diversos contextos a vectores, matrices, tensores y espacios vectoriales. Existen casos especiales del mismo:
- El producto de Kronecker es una operación sobre dos matrices de tamaño arbitrario que da como resultado una matriz bloque. Es un caso especial del producto tensorial cuando se aplica a matrices.
- El producto exterior (outer product) es una operación matemática que toma dos vectores y produce una matriz. Es el caso especial del producto tensorial cuando los operandos son vectores.
Producto tensorial de dos vectores:
Supongamos que tenemos dos vectores columna u
y v
de dimensiones (m, 1)
y (n, 1)
respectivamente:
El producto tensorial de u
y v
se denota como u ⊗ v
y se calcula como el producto matricial u * v^T
. El resultado es una matriz de dimensiones (m, n)
cuyos elementos son el producto de cada elemento de u
por cada elemento de v
:
Por ejemplo, si tenemos los vectores columna u = [1, 2]^T
y v = [3, 4, 5]^T
, el producto tensorial de u
y v
sería:
Producto tensorial de dos matrices cuadradas:
Supongamos que tenemos dos matrices cuadradas A
y B
de dimensiones (m,m)
y (n,n)
respectivamente:
El producto tensorial de A
y B
se denota como A ⊗ B
y se calcula como una matriz de bloques donde cada elemento a_{ij}
de la matriz A
se reemplaza por el bloque a_{ij} * B
. El resultado es una matriz de dimensiones (m*n,m*n)
:
Por ejemplo, si tenemos las matrices cuadradas A = [[1, 2], [3, 4]]
y B = [[5, 6], [7, 8]]
, el producto tensorial de A
y B
sería:
Producto tensorial de dos matrices no cuadradas:
El producto tensorial se puede calcular para cualquier par de matrices (no necesariamente cuadradas). Supongamos que tenemos dos matrices A
y B
de dimensiones (m,p)
y (n,q)
respectivamente:
El producto tensorial de A
y B
se denota como A ⊗ B
y se calcula como una matriz de bloques donde cada elemento a_{ij}
de la matriz A
se reemplaza por el bloque a_{ij} * B
. El resultado es una matriz de dimensiones (m*n,p*q)
:
Por ejemplo, si tenemos las matrices A = [[1, 2], [3, 4]]
y B = [[5, 6, 7], [8, 9, 10]]
, el producto tensorial de A
y B
sería:
Esta operación tiene varias propiedades interesantes, algunas de las cuales se enumeran a continuación:
- Bilinealidad: El producto tensorial es bilineal, lo que significa que satisface las siguientes propiedades para cualquier escalar
α
yβ
y cualquier tensorA
,B
yC
del mismo tipo:
- Asociatividad con el producto escalar: El producto tensorial es asociativo con el producto escalar, lo que significa que para cualquier escalar
α
y cualquier tensorA
yB
del mismo tipo, se cumple la siguiente propiedad:
-
No conmutatividad: En general, el producto tensorial no es conmutativo, lo que significa que para dos tensores
A
yB
del mismo tipo, no siempre se cumple queA ⊗ B = B ⊗ A
. Sin embargo, en algunos casos especiales (por ejemplo, cuandoA
yB
son escalares), el producto tensorial puede ser conmutativo. -
Asociatividad generalizada: El producto tensorial satisface una forma generalizada de asociatividad, lo que significa que para cualquier número finito de tensores
A1
,A2
, ...,An
del mismo tipo, se cumple la siguiente propiedad:
- Distributividad sobre el producto de Kronecker: El producto tensorial es distributivo sobre el producto de Kronecker (también conocido como producto directo), lo que significa que para cualquier matriz
A
,B
,C
yD
de dimensiones compatibles, se cumple la siguiente propiedad:
Estas son solo algunas de las propiedades del producto tensorial. Esta operación tiene muchas otras propiedades interesantes y aplicaciones en diferentes campos de las matemáticas y la física.
import numpy as np
u = np.array([1, 2])
v = np.array([3, 4, 5])
w = np.outer(u,v)
print(w)
A = np.array([[2,-1,3], [1,-2,-1], [2,-2,-3]])
B = np.array([[3, -1], [4, -2]])
C = np.kron(A, B)
print(C)
C = np.tensordot(A,B,axes=0).reshape(6,6)
print(C)