pytorch对矩阵(奇异和非奇异)求逆
非奇异矩阵求逆
import torch
x = torch.FloatTensor([[[1.0, 2.0],[1.0, 4.0]],[[1.0, 2.0],[1.0, 3.0]]])
y=torch.inverse(x)
print(y)
输出结果为
tensor([[[ 2.0000, -1.0000],[-0.5000, 0.5000]],[[ 3.0000, -2.0000],[-1.0000, 1.0000]]])
或者用
y=torch.linalg.inv(x)
也可以得到相同的结果
奇异矩阵求逆
import torch
x = torch.FloatTensor([[[1.0, 2.0],[1.0, 2.0]],[[1.0, 2.0],[1.0, 3.0]]])
y=torch.inverse(x)
print(y)
报错:
RuntimeError: inverse_cpu: The diagonal element 2 is zero, the inversion could not be completed because the input matrix is singular.
法1:计算矩阵行列式,计算abs(det)>0的矩阵的逆,删除奇异矩阵。缺点是改变了张量维度。
import torch
from torch.linalg import det
x = torch.FloatTensor([[[1.0, 2.0],[1.0, 2.0]],[[1.0, 2.0],[1.0, 3.0]]])
determinants = torch.det(x)
y =torch.inverse(x[determinants.abs()>0.])
print(y)
输出结果为
tensor([[[ 3., -2.],[-1., 1.]]])
法2:用torch.linalg.pinv()得到奇异矩阵的伪逆矩阵
import torch
x = torch.FloatTensor([[[1.0, 2.0],[1.0, 2.0]],[[1.0, 2.0],[1.0, 3.0]]])
y=torch.linalg.pinv(x)
print(y)
输出结果为
tensor([[[ 0.1000, 0.1000],[ 0.2000, 0.2000]],[[ 3.0000, -2.0000],[-1.0000, 1.0000]]])
自定义求逆函数,仅针对非奇异矩阵
import torch
import numpy as np
from torch.linalg import detdef cof1(M,index):zs = M[:index[0]-1,:index[1]-1]ys = M[:index[0]-1,index[1]:]zx = M[index[0]:,:index[1]-1]yx = M[index[0]:,index[1]:]s = torch.cat((zs,ys),axis=1)x = torch.cat((zx,yx),axis=1)return det(torch.cat((s,x),axis=0))def alcof(M,index):return pow(-1,index[0]+index[1])*cof1(M,index)def adj(M):result = torch.zeros((M.shape[0],M.shape[1]))for i in range(1,M.shape[0]+1):for j in range(1,M.shape[1]+1):result[j-1][i-1] = alcof(M,[i,j])return resultdef invmat(M):return 1.0/det(M)*adj(M)x = torch.FloatTensor([[1.0, 2.0],[1.0, 4.0]])
print(invmat(x))
输出结果:
tensor([[ 2.0000, -1.0000],[-0.5000, 0.5000]])
pytorch对矩阵(奇异和非奇异)求逆相关推荐
- php随机数字不重复使等式成立_Schur补与矩阵打洞,SMW求逆公式,分块矩阵与行列式(不)等式...
矩阵论记号约定zhuanlan.zhihu.com Schur补与矩阵打洞 考虑正态随机向量 ,求 条件分布的一个类似于线性回归的常用技巧是--寻找常值矩阵 适合 :对于正态变量而言独立等价于不相关 ...
- 线性代数 --- 如何判断矩阵是否可逆(奇异与非奇异)?
如何判断矩阵是否可逆? 一般情况而言,判断矩阵是否可逆大多数人都会选择计算矩阵的行列式(determinant)?如果矩阵的行列式为0,则判断该矩阵为奇异矩阵(singular matrix),即不可 ...
- matlab矩阵非方阵求逆,python – 从numpy或matlab中的满秩非矩形矩阵中获取可逆方阵...
假设您具有满秩的NxM矩阵A,其中M> N.如果我们用C_i表示列(尺寸为Nx1),那么我们可以将矩阵写为 A = [C_1, C_2, ..., C_M] 如何获得原始矩阵A的第一个线性独立列 ...
- 矩阵的基本运算(相乘、相加、求逆、转置)
python的numpy库提供矩阵运算的功能,因此我们在需要矩阵运算的时候,需要导入numpy的包. from numpy import * ; #导入numpy的库函数 import numpy a ...
- MATLAB转置矩阵乘,【MATLAB】线性代数矩阵基本运算(转置,乘法,求逆)
文章目录 创建矩阵 向量转置 矩阵乘法 单位矩阵 矩阵求逆 创建矩阵 MATLAB 提供了许多函数,用于创建各种类型的矩阵.例如,您可以使用基于帕斯卡三角形的项创建一个对称矩阵: A = pascal ...
- 【MATLAB】线性代数矩阵基本运算(转置,乘法,求逆)
文章目录 创建矩阵 向量转置 矩阵乘法 单位矩阵 矩阵求逆 创建矩阵 MATLAB 提供了许多函数,用于创建各种类型的矩阵.例如,您可以使用基于帕斯卡三角形的项创建一个对称矩阵: A = pascal ...
- 基于Spark的巨型矩阵分布式LU计算求逆【第一篇】
概述 本文将介绍如何利用Spark解决巨型矩阵分布式的LU法求逆的问题.本篇则将对LU求逆的前半部分--分布式LU分解做介绍. [后半部分再我的队友整理完后,会以链接的形式补在这里] 正文 首先,我们 ...
- Matlab 小笔纪之求逆和取余
笔记一: 求逆: 写在前:奇异方阵VS非奇异方阵 若方阵:,为非奇异方阵,满足,反之为奇异方阵. Matlab求逆方式如下: ,A是mxm方阵,b是mx1列向量 ,针对非奇异方阵求逆 ,可用于一切 ...
- matlab 奇异值求逆,你好,请问matlab对奇异矩阵求逆你有好的方法吗?
摘要: 奇异矩阵求逆问题!!!X奇异C有无穷多解.找基础解系对不起,最小二乘都快忘光了,线性代数还行..希望下面的东西能帮到你(你试试看):对A进行QR分解(A=QR),其中Q是nxk正交... 奇异 ...
最新文章
- js监听audio播放完毕
- Bootstrap中模态框多层嵌套时滚动条问题
- C++用FindFirstFile、FindNext递归遍历硬盘的文件
- go 打印bool_Golang语言基础教程:键盘输入和打印输出
- date(w) 输出后对应的周几不对的问题
- 服务器php只显示文本,服务器上的php echos文件是文本而不是二进制文件
- 一个程序员的感慨的《虚拟光驱》
- 腾讯开源物联网操作系统 TencentOS tiny,最小体积 1.8KB!
- Effective Use of Word Order for Text Categorization with Convolutional Neural Networks
- MVC应用程序结构与规划
- VS选中cpp文件后定位其在解决方案管理器中属于哪个项目
- VIM 第五节:文件信息、跳转、定位括号和缩进 https://fishc.com.cn/thread-65856-1-1.html
- python3 tkinter教程
- 判断输入的字符与已知字符相等_你会输入带圈字符吗?
- Word:表格中绘制斜线表头
- 淘宝天猫页面详情采集API调用展示(APP端商品详情)
- Spring(二)控制层梳理
- Java8中关于LocalDateTime转换方法总结
- MacOS系统通过命令行启动Chrome浏览器并添加启动参数
- Covetrus宣布首席执行官和董事长过渡