Encuentra el determinante de una array compleja en PyTorch

El módulo de álgebra lineal torch.linalg de PyTorch proporciona la función torch.linalg.det() para calcular el determinante de una array cuadrada (real o compleja). Esta función también calcula el determinante de cada array cuadrada en un lote. 

Sintaxis:

torch.linalg.det(entrada) –> Tensor

la entrada es una array (n, n) o un lote de arrays de tamaño (b, n, n) donde b es la dimensión del lote (número de arrays en un lote). Esta entrada debe ser un tensor. Esta función devuelve un tensor del/de los valor/es determinante/s.

Nota: esta función es compatible con los tipos de d flotante, doble, cfloat y cdouble .

Primero veamos cómo crear una array compleja en PyTorch y luego calculemos el determinante de la array. Para crear una array compleja en PyTorch, usamos tensores complejos 2D . También podemos crear un lote de arrays complejas. Los dtypes complejos admitidos son torch.cfloat y torch.cdouble. 

A continuación se muestran algunos ejemplos para crear una array compleja (tensor complejo bidimensional) y encontrar su determinante. 

Ejemplo 1:

Cree un tensor complejo 2D de tamaño 2 × 2 generando números aleatorios y calcule el determinante.

Python3

# import library
import torch
 
# create 2x2 complex matrix using
# random numbers
mat = torch.randn(2,2, dtype = torch.cfloat)
 
# display the matrix
print("Complex Matrix: \n", mat)
 
# Compute the determinant of Matrix
# using torch.linalg.det()
det = torch.linalg.det(mat)
print("Determinant: \n", det)

Producción:

Ejemplo 2:

Otra forma de crear una array compleja en PyTorch es usar torch.complex(real, imag). Esto crea un tensor complejo con partes reales e imaginarias como real e imag. Tanto real como imag deben ser flotantes o dobles e imag debe ser del mismo tipo que real. En el siguiente programa, creamos un tensor complejo 2D de tamaño 2×2 y calculamos su determinante.

Python3

# import library
import torch
 
# create real parts the complex numbers
real = torch.tensor([[1, 2],[5,6]], dtype=torch.float32)
 
# create imaginary parts of the complex numbers
imag = torch.tensor([[3, 4],[8,9]], dtype=torch.float32)
 
# create complex tensor (matrix)
z = torch.complex(real, imag)
print("Complex Matrix: \n", z)
 
# Compute the determinant of Matrix
# using torch.linalg.det()
det = torch.linalg.det(z)
print("Determinant: \n", det)

Producción:

Ejemplo 3:

También se pueden crear tensores complejos a partir de tensores reales ya existentes . Los tensores de forma reales (…, 2) se pueden convertir fácilmente en tensores complejos usando torch.view_as_complex() y su determinante se puede calcular usando el método torch.linalg.det() .

Python3

# import library
import torch
 
# create a real tensor
mat = torch.randn(3,3,2)
 
# display the real tensor
print("Real Tensor: \n",mat)
 
# convert the above real tensor
# into complex tensor
mat = torch.view_as_complex(mat)
 
# display the complex tensor (matrix)
print("Complex Tensor (Matrix): \n", mat)
 
# Compute the determinant of Matrix
# using torch.linalg.det()
det = torch.linalg.det(mat)
print("Determinant: \n", det)

Producción: 

Ejemplo 4:

Aquí creamos un lote de 3 tensores complejos de tamaño 2×2 y calculamos su determinante.

Python3

# import library
import torch
 
# create matrix
mat = torch.randn(3,2,2, dtype = torch.cfloat)
 
# display matrix
print("Batch of Complex Matrices: \n", mat)
 
# Compute the determinant
det = torch.linalg.det(mat)
print("Determinant: \n", det)

Producción:

Ejemplo 5:

Aquí hay otro programa donde creamos un lote de 3 tensores complejos de tamaño 4×4 y calculamos el determinante. 

Python3

# import library
import torch
 
# create complex matrix
mat = torch.randn(3,4,4, dtype = torch.cfloat)
 
# display matrix
print("Batch of Complex Matrices: \n", mat)
 
# Compute the determinant
det = torch.linalg.det(mat)
print("Determinant: \n", det)

Producción:

Publicación traducida automáticamente

Artículo escrito por shahidedu7 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *