PyTorch – 如何计算矩阵的伪逆?


要计算方阵的伪逆,我们可以应用 **torch.linalg.pinv()** 方法。它返回一个包含给定矩阵伪逆的新张量。它接受一个矩阵、一批矩阵以及矩阵的批次。矩阵是一个 2D 的 torch 张量。它支持 **float、double、cfloat** 和 **cdouble** 数据类型作为输入。

语法

torch.linalg.pinv(M)

其中 M 是一个矩阵或矩阵的批次。

步骤

我们可以使用以下步骤来计算矩阵的伪逆:

  • 导入所需的库。在以下所有示例中,所需的 Python 库是 **torch**。确保您已安装它。

import torch
  • 定义一个矩阵。这里,我们定义一个矩阵(大小为 3x4 的 2D 张量)。

M = torch.randn(3,4)
  • 使用 **torch.linalg.pinv(M)** 计算伪逆矩阵。M 是一个矩阵或矩阵的批次/批次。可以选择将此值分配给一个新变量。

Mpinv = torch.linalg.pinv(M)
  • 打印上面计算出的伪逆矩阵

print("Norm:", Mpinv)

示例 1

在这个程序中,我们计算给定输入矩阵的伪逆矩阵。

# Python program to compute the pseudoinverse of a matrix
# import required library
import torch

# define a matrix of size 3x4
M = torch.randn(3,4)
print("Matrix M:
", M) print("Matrix size:", M.size()) # compute the inverse of above defined matrix Mpinv = torch.linalg.pinv(M) print("Pseudo inverse Matrix:
", Mpinv) print("Pseudo inverse Matrix size:", Mpinv.size())

输出

它将产生以下输出:

Matrix M:
   tensor([[ 1.1350, -1.0521, -0.6431, -0.1302],
      [-0.5745, 1.2299, 0.9296, 1.6188],
      [ 0.6129, -1.0834, -0.0711, 0.2382]])
Matrix size: torch.Size([3, 4])
Pseudo inverse Matrix:
   tensor([[ 1.1440, 0.3123, -0.6687],
      [ 0.7733, 0.2948, -1.3105],
      [-0.8647, -0.0376, 0.9169],
      [ 0.3150, 0.5262, 0.2319]])
Pseudo inverse Matrix size: torch.Size([4, 3])

示例 2

在这个程序中,我们计算给定输入复数矩阵的伪逆矩阵。

# Python program to compute the
# pseudo inverse of a complex matrix

# import required library
import torch

# define a 3x2 matrix of random complex numbers
M = torch.randn(3,2, dtype = torch.cfloat)
print("Matrix M:
", M) print("Matrix size:", M.size()) # compute the inverse of above defined matrix Minv = torch.linalg.pinv(M) print("Pseudo inverse Matrix:
", Minv) print("Pseudo inverse Matrix size:", Minv.size())

输出

它将产生以下输出:

Matrix M:
   tensor([[ 0.5273-0.7986j, 0.7881+0.0765j],
      [-0.6390-0.3126j, -0.1926+0.0727j],
      [-0.7445-0.2163j, 0.0649+0.1611j]])
Matrix size: torch.Size([3, 2])
Pseudo inverse Matrix:
   tensor([[ 0.0384+0.2124j, -0.3826+0.3125j, -0.5792+0.1700j],
      [ 0.9675-0.1972j, -0.2763-0.5200j, 0.2895-0.6992j]])
Pseudo inverse Matrix size: torch.Size([2, 3])

示例 3

在这个程序中,我们计算三个矩阵批次的伪逆。

# Python program to compute the
# pseudo inverse of batch of matrices

# import the required library
import torch

# define a batch of three 3x2 matrices
B = torch.randn(3,3,2)
print("Batch of Matrices :
", B) print(B.size()) # compute the inverse of above defined batch of matrices Binv = torch.linalg.pinv(B) print("Pseudo inverse Matrices:
", Binv) print(Binv.size())

输出

它将产生以下输出:

Batch of Matrices :
   tensor([[[-0.1761, -1.4982],
      [ 0.7792, -0.0071],
      [-0.6187, -0.2396]],

      [[-1.1825, 1.2347],
      [ 0.0127, 1.0387],
      [ 0.0319, 0.5046]],

      [[-1.2648, -0.7298],
      [-1.8663, -1.1158],
      [-0.0148, 0.5049]]])

torch.Size([3, 3, 2])
Pseudo inverse Matrices:
   tensor([[[ 0.0932, 0.8222, -0.6073],
      [-0.6673, -0.1483, 0.0032]],

      [[-0.8261, 0.7798, 0.4164],
      [ 0.0185, 0.7538, 0.3850]],

      [[-0.2850, -0.3336, -1.1492],
      [ 0.0613, -0.0569, 1.9435]]])
torch.Size([3, 2, 3])

更新于: 2022年1月7日

573 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.