Numpy中求矩阵的逆与伪逆(numpy.linalg.inv(),numpy.linalg.pinv()函数详解)

article/2024/12/25 0:02:50

numpy中求矩阵的逆与伪逆

numpy中求矩阵的逆:numpy.linalg.inv()
numpy中求矩阵的伪逆: numpy.linalg.pinv()

numpy中求矩阵的逆(numpy.linalg.inv)

使用命令numpy.linalg.inv(Matrix)

功能

Compute the (multiplicative) inverse of a matrix.
Given a square matrix a, return the matrix ainv satisfying
dot(a, ainv) = dot(ainv, a) = eye(a.shape[0]).

计算一个方阵的逆,使之满足 A A − 1 = A − 1 A = I AA^{-1}=A^{-1}A=I AA1=A1A=I

Parameters

  • a : (…, M, M) array_like
    Matrix to be inverted.

a是输入的要计算逆的矩阵数组。

Returns

  • ainv : (…, M, M)
    ndarray or matrix (Multiplicative) inverse of the matrix a.

返回的是对应的逆矩阵的数组。

Raises

  • LinAlgError
    If a is not square or inversion fails.

如果a不是方阵或者不可逆,则Raise LinAlgError

Examples

>>> from numpy.linalg import inv
>>> a = np.array([[1., 2.], [3., 4.]])
>>> ainv = inv(a)
>>> np.allclose(np.dot(a, ainv), np.eye(2))
True
>>> np.allclose(np.dot(ainv, a), np.eye(2))
TrueIf a is a matrix object, then the return value is a matrix as well:>>> ainv = inv(np.matrix(a))
>>> ainv
matrix([[-2. ,  1. ],[ 1.5, -0.5]])Inverses of several matrices can be computed at once:>>> a = np.array([[[1., 2.], [3., 4.]], [[1, 3], [3, 5]]])
>>> inv(a)
array([[[-2.  ,  1.  ],[ 1.5 , -0.5 ]],[[-1.25,  0.75],[ 0.75, -0.25]]])

numpy中求矩阵的伪逆(numpy.linalg.inv)

伪逆的定义以及意义

伪逆在某些情况下特指摩尔彭若斯广义逆。
广义逆矩阵:
广义矩阵
A A A的摩尔彭若斯矩阵记为 A + A^+ A+.那么有两个基本性质:

A A + A = A AA^+A=A AA+A=A

A + A A + = A + A^+AA^+=A^+ A+AA+=A+

功能

Compute the (Moore-Penrose) pseudo-inverse of a matrix.
Calculate the generalized inverse of a matrix using its singular-value decomposition (SVD) and including all large singular values.
… versionchanged:: 1.14
Can now operate on stacks of matrices

Parameters

  • a : (…, M, N) array_like

Matrix or stack of matrices to be pseudo-inverted.

要做伪逆运算的矩阵或者矩阵的栈

  • rcond : (…) array_like of float

Cutoff for small singular values.
Singular values less than or equal to rcond * largest_singular_value are set to zero.
Broadcasts against the stack of matrices.

对很小的奇异值做裁剪。当某个奇异值小于等于最大的奇异值乘以rcond,就将它设置为0.

  • hermitian : bool, optional

If True, a is assumed to be Hermitian (symmetric if real-valued),
enabling a more efficient method for finding singular values.
Defaults to False.

如果为真,相当于告诉Numpy输入矩阵是Hermitian矩阵。会采用更加有效的方法去寻找奇异值。默认为False.

Returns

  • B : (…, N, M) ndarray

The pseudo-inverse of a. If a is a matrix instance, then so is B.

返回a的伪逆

Raises

  • LinAlgError

If the SVD computation does not converge.

如果矩阵不能进行奇异值分解(SVD),则报错。

See Also

--------
scipy.linalg.pinv : Similar function in SciPy.
scipy.linalg.pinv2 : Similar function in SciPy (SVD-based).
scipy.linalg.pinvh : Compute the (Moore-Penrose) pseudo-inverse of aHermitian matrix.

Notes

The pseudo-inverse of a matrix A, denoted A + A^+ A+, is
defined as: “the matrix that ‘solves’ [the least-squares problem]
A x = b Ax = b Ax=b,” i.e., if x ˉ {\bar x} xˉ is said solution, then A + A^+ A+ is that matrix such that x ˉ = A + b {\bar x} = A^+b xˉ=A+b.

It can be shown that if : Q 1 Σ Q 2 T = A Q_1 \Sigma Q_2^T = A Q1ΣQ2T=A is the singular value decomposition of A, then A + = Q 2 Σ + Q 1 T A^+ = Q_2\Sigma^+ Q_1^T A+=Q2Σ+Q1T, where : Q 1 , 2 Q_{1,2} Q1,2 are orthogonal matrices, : Σ \Sigma Σ is a diagonal matrix consisting of A’ s so-called singular values, (followed, typically, by zeros), and then : Σ + \Sigma^+ Σ+ is simply the diagonal matrix consisting of the reciprocals of A’s singular values (again, followed by zeros).
References:
… [1] G. Strang, Linear Algebra and Its Applications, 2nd Ed., Orlando,
FL, Academic Press, Inc., 1980, pp. 139-142.

对于矩阵A,有方程 A x = b Ax=b Ax=b,那么它的摩尔彭若斯伪逆 A + A^+ A+满足:对于 x ˉ = A + b \bar x = A^+b xˉ=A+b, x ˉ \bar x xˉ能使得 A x Ax Ax b b b的二范数距离最小。
矩阵A的摩尔彭若斯伪逆可以通过奇异值分解来求得。A的奇异值分解为: Q 1 Σ Q 2 T = A Q_1 \Sigma Q_2^T = A Q1ΣQ2T=A。那么其伪逆 A + = Q 2 Σ + Q 1 T A^+ = Q_2\Sigma^+ Q_1^T A+=Q2Σ+Q1T。其中 Σ + \Sigma^+ Σ+就是 Σ \Sigma Σ的对角元素的倒数构成的对角矩阵。其实因为 Σ \Sigma Σ本身就是对角矩阵, Σ + \Sigma^+ Σ+就是 Σ − 1 \Sigma^{-1} Σ1

Examples

The following example checks that a * a+ * a == a and
a+ * a * a+ == a+:

>>> a = np.random.randn(9, 6)
>>> B = np.linalg.pinv(a)
>>> np.allclose(a, np.dot(a, np.dot(B, a)))
True
>>> np.allclose(B, np.dot(B, np.dot(a, B)))
True

如果觉得文章对您有帮助的话,可以点个赞,是对博主最大的肯定!


http://chatgpt.dhexx.cn/article/q2jO3Fmi.shtml

相关文章

「 C++ 技巧」使用Eigen实现伪逆矩阵(pinV)

一、前言 伪逆矩阵(Moore-Penrose pseudoinverse)A定义为AVDUT,其中&#xff0c;U&#xff0c;D和V是矩阵A奇异值分解后得到的矩阵。对角矩阵D的伪逆D是非零元素取倒数之后再转置得到的。 二、执行代码 #include "funset.hpp" #include <math.h> #include <…

通过FPGA实现矩阵的伪逆pinv计算

1.问题描述: 首先对伪逆pinv进行推导,转换为逆inv的过程 2.部分程序: `timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 21:16:50 03/15/2019 // Design Name: // Module Name: inv_matrix // Project Name: // Target Devices: // To…

【C++】pinv()函数原型以及matlab中的pinv() —— 8

一、pinv()原型 函数形式&#xff1a;pinv(J, G, P)&#xff1b; 核心算法&#xff1a; 解释&#xff1a;G是正定矩阵&#xff0c;P是矩阵J的伪逆矩阵。当G为恒定常数时&#xff0c;以下等式成立&#xff1a; 函数原型&#xff1a; template<typename DerivedA, typena…

python之numpy之伪逆numpy.linalg.pinv

文章目录 解释及实现笔记伪逆在最简单的线性回归中的应用 解释及实现 记 X X X的伪逆为 p i n v ( X ) pinv(X) pinv(X)&#xff0c;则有 p i n v ( X ) ( X T X ) − 1 X T pinv(X)(X^TX)^{-1}X^T pinv(X)(XTX)−1XT&#xff0c;容易发现 p i n v ( X ) X I pinv(X)XI pin…

【C++】Eigen介绍与使用 —— 4

一、Eigen介绍 Eigen是可以用来进行线性代数、矩阵、向量操作等运算的C库&#xff0c;它里面包含了很多算法。它的License是MPL2。它支持多平台。Eigen采用源码的方式提供给用户使用&#xff0c;在使用时只需要包含Eigen的头文件即可进行使用。之所以采用这种方式&#xff0c;…

图像增强(1-灰度级变换)—内涵MATLAB源码

起篇三连问&#xff1a; 第一问&#xff1a;何为数字图像的增强&#xff1f; 个人理解&#xff0c;就是通过对图像进行平滑去噪、改变灰度级或者增强边缘&#xff0c;将我们想要的某些图像特征更明显的显现出来。这就是图像的增强&#xff0c;该过程重在对比度的拉伸。 第二问…

(数字图像处理MATLAB+Python)第五章图像增强-第一节:图像增强概述和基于灰度级变换的图像增强

文章目录 一&#xff1a;图像增强概述二&#xff1a;基于灰度级变换的图像增强&#xff08;1&#xff09;线性灰度级变换A&#xff1a;基本线性灰度级变换B&#xff1a;分段线性灰度级变换①&#xff1a;定义②&#xff1a;截取式灰度变换③&#xff1a;窗切片 &#xff08;2&a…

图像处理:灰度(级)和分辨率

1、像素点 ​像素点是最小的图像单元&#xff0c;一张图片由好多的像素点组成。如下图 可以看到上述图片尺寸是500 * 338 的&#xff0c;表示图片是由一个500 * 338的像素点矩阵构成的&#xff0c;这张图片的宽度是500个像素点的长度&#xff0c;高度是338个像素点的长度&…

数字图像处理——灰度级分层

灰度级分层的两种基本形式如下&#xff1a; 一&#xff1a;将感兴趣的范围内的灰度值显示为一个值&#xff0c;而其他灰度值显示为另一个值 二&#xff1a;将感兴趣的范围内的灰度值变亮或变暗&#xff0c;而其他灰度值保持不变 Python实现过程如下&#xff1a; 使用的图像…

灰度级形态学 - 顶帽变换和底帽变换

目录 1. 介绍 2. 代码实现 1. 介绍 顶帽变换和底帽变换就是图像的加减和开闭运算的结合 顶帽变换的公式为&#xff1a;原图 - 原图的开运算 这里结合开运算的几何图形解释来介绍顶帽变换。 因为开运算是结构元从下往上推动的过程&#xff0c;所以会删除图像灰度值相对周围高…

图像处理基础——灰度级形态学

文章目录 简介膨胀 腐蚀腐蚀膨胀 开运算 闭运算一些基本的灰度级形态学算法形态学平滑形态学梯度顶帽变换 底帽变换 灰度级形态学重建 简介 形态学只适用于Region操作 或者是二值化后的图片 需要延伸到灰度形态学才能广泛应用 拓展到灰度级形态学后 结构元的表达形式可以大致分…

灰度图像分辨率变换(灰度级)

目的&#xff1a;&#xff08;1&#xff09;对一帧8bits 128x128的灰度图像处理为1bits和3bits的128x128灰度图像。 &#xff08;2&#xff09;处理为8bits 64x64和32x32的灰度图像。 一、基本原理 一幅图像的x和y坐标及幅度可能都是连续的。为了把它转换为数字形式&#x…

matlab-图形采样及灰度级转换

目录 一、图像采样 1、实验内容 2、采样原理 3、实验程序 4&#xff0e;实验结果与分析 5&#xff0e;思考题 二、图像类型转换 1、实验内容 2&#xff0e;实验原理 3、程序 4&#xff0e;实验结果与分析 5. 思考题 一、图像采样 1、实验内容 试对任意一幅图像分…

灰度级形态学

灰度级形态学 灰度级形态学知识点&#xff1a;1、灰度化和二值化2、灰度图像是几通道图像3、灰度图和二值图的区别&#xff1a;4、像素点灰度形态学梯度 形态学只适用于区域操作 或者是二值化后的图片. 灰度级形态学知识点&#xff1a; 在图像处理中&#xff0c;用RGB三个分量&…

灰度、灰度级、分辨率、像素值相关概念

灰度、灰度级、分辨率、像素值&#xff1b; 2017年09月18日 20:01:04 以梦为马_不负韶华 阅读数&#xff1a;14346 版权声明&#xff1a;版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/Strive_0902/article/details/78023…

转换为不同灰度级图像

将256级灰度图像转换为64级灰度图像、32级灰度图像等。 matlab代码: I imread(cameraman.tif); [m,n]size(I); Jzeros(m,n); for i1:mfor j1:nJ(i,j)floor(I(i,j)/32);end end Kuint8(J); subplot(131) imshow(I);title(原图);colorbar subplot(132) imshow(K,[0,7]);title(…

OpenCV黑白图像增强——灰度级切片

前言 在OpenCV中&#xff0c;在Mat中&#xff0c;表达图像的值是0到255&#xff0c;0为黑色&#xff0c;255为白色&#xff0c;而已灰度级切片对灰度图像做二值映射讲处理&#xff0c;给一个阈值&#xff0c;按这个阈值去分层&#xff0c;大于这个阈的赋一个值&#xff0c;小于…

数字图像处理学习笔记(二):图像灰度级的增加、减少

实验截图&#xff1a; 图像灰度级阶梯 实验代码&#xff1a; img1 imread(erciyuan.jpg); img2 rgb2gray(img1); for i0:7 img (uint8(img2/(2^i)))*(2^i); %灰度级逐渐递减的过程 subplot(2,4,i1), imshow(img,[]); title( [ ,num2str(2^(8-i)),级灰度图像]); %设置…

灰度级形态学 - 灰度膨胀和灰度腐蚀

目录 1. 介绍 2. code 1. 介绍 灰度级形态学将形态学在二值图像的处理中扩展到灰度图像 灰度腐蚀&#xff1a;得到kernel 处理子区域的最小值 因此&#xff1a;灰度腐蚀后的图像整体偏暗&#xff0c;并且亮特征减少 灰度膨胀&#xff1a;得到kernel 处理子区域的最大值 同…

图像处理名词解释之灰度、灰度级、分辨率、像素值总结

​ 1、像素点 ​像素点是最小的图像单元&#xff0c;一张图片由好多的像素点组成。如下图 可以看到上述图片尺寸是500 * 338 的&#xff0c;表示图片是由一个500 * 338的像素点矩阵构成的&#xff0c;这张图片的宽度是500个像素点的长度&#xff0c;高度是338个像素点的长度&am…