Python处理矩阵和线性代数问题

这篇具有很好参考价值的文章主要介绍了Python处理矩阵和线性代数问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主要函数

如未作说明,下列方法均调用自linalg

矩阵分解 choleskyqr,奇异值分解svd
求特征值 eigvals,共轭对称阵特征值eigvalsh(a[, UPLO])
特征值和
特征向量
eig,共轭对称的特征值和向量eigh(a[, UPLO])
特征数字 范数norm,迹trace
条件数cond,行列式det,符号slogdet
通过SVD方法求秩matrix_rank(M[, tol, hermitian])
解方程 solve(a, b),张量方程tensorsolve(a, b[, axes])
线性矩阵方程的最小二乘解lstsq(a, b[, rcond])
求逆 inv,伪逆pinv,张量逆tensorinv
- :-
矩阵分解 choleskyqr,奇异值分解svd
求特征值 eigvals,共轭对称阵特征值eigvalsh(a[, UPLO])
特征值和
特征向量
eig,共轭对称的特征值和向量eigh(a[, UPLO])
特征数字 范数norm,迹trace
条件数cond,行列式det,符号slogdet
通过SVD方法求秩matrix_rank(M[, tol, hermitian])
解方程 solve(a, b),张量方程tensorsolve(a, b[, axes])
线性矩阵方程的最小二乘解lstsq(a, b[, rcond])
求逆 inv,伪逆pinv,张量逆tensorinv

上述表格中所列出的均为经典概念或者经典算法,注入特征值、特征向量、范数等概念自然不必赘述。

矩阵分解

有关矩阵分解的三种方法,在此做一个简略的解释,对于矩阵 M M M而言,如果可以分解为 Q R QR QR的形式,其中 Q Q Q为正交矩阵, R R R为上三角矩阵,则此种方法为QR分解;奇异值分解稍微复杂一点,假设 M M M可分解为 S V D SVD SVD,其中 S S S D D D分别是行数不相等的方阵, V V V则是对角阵,则这种分解方法为奇异值分解。

>>> import numpy as np
>>> M = np.random.rand(4,4)
>>> print(M)
[[0.32116742 0.8394773  0.36011495 0.4544155 ]
 [0.39427835 0.17813826 0.49553932 0.9707901 ]
 [0.12197008 0.67413918 0.84044815 0.47201928]
 [0.86152707 0.57731393 0.57027362 0.91170088]]
>>> q,r = np.linalg.qr(M)
>>> print(q)
[[-0.31867407  0.65970523  0.55548743 -0.39328051]
 [-0.39121741 -0.21491979 -0.49634831 -0.74457825]
 [-0.12102318  0.67771442 -0.6574708   0.30624941]
 [-0.85483868 -0.24351932  0.1131557   0.44401009]]
>>> print(r)
[[-1.00782415 -0.91230718 -0.89782856 -1.36108287]
 [ 0.          0.83180887  0.56177969  0.18901576]
 [ 0.          0.         -0.53396118 -0.43660267]
 [ 0.          0.          0.         -0.35218194]]
# 下面是SVD分解
>>> s,v,d = np.linalg.svd(M)
>>> s
array([[-0.42332819, -0.46593393, -0.50222164, -0.59285094],
       [-0.46502685,  0.54456992,  0.48233038, -0.50453051],
       [-0.46055779, -0.60153282,  0.56922965,  0.31940945],
       [-0.62644217,  0.35285612, -0.4371595 ,  0.54032798]])
>>> v
array([2.32219426, 0.70718892, 0.46245349, 0.20757881])
>>> d
array([[-0.39410157, -0.47814575, -0.48540482, -0.61680042],
       [ 0.41812791, -0.70128404, -0.2860149 ,  0.50156278],
       [-0.60183471, -0.44181835,  0.62117299,  0.23819245],
       [ 0.55466024, -0.29047183,  0.54472172, -0.55790356]])

M M M可被分解为 L L ∗ LL^* LL,其中 L L L为下三角矩阵, L ∗ L^* L为其共轭,那么这种分解方式即为cholesky分解,需要注意,并非所有矩阵均有cholesky分解,只有对称的正定矩阵才可以。

>>> np.linalg.cholesky(M)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<__array_function__ internals>", line 5, in cholesky
  File "D:\CS\Anaconda3\lib\site-packages\numpy\linalg\linalg.py", line 763, in cholesky
    r = gufunc(a, signature=signature, extobj=extobj)
  File "D:\CS\Anaconda3\lib\site-packages\numpy\linalg\linalg.py", line 91, in _raise_linalgerror_nonposdef
    raise LinAlgError("Matrix is not positive definite")
numpy.linalg.LinAlgError: Matrix is not positive definite
>>> L = np.linalg.cholesky(M@M.T)
>>> L
array([[ 1.06960127,  0.        ,  0.        ,  0.        ],
       [ 0.83747617,  0.82086233,  0.        ,  0.        ],
       [ 1.04922106,  0.20002046,  0.50756537,  0.        ],
       [ 1.29112734,  0.64431997, -0.15694312,  0.35375359]])

线性最小二乘法

lstsq(a,b)用于求解类似于a@x=b中的x,其中,a M × N M\times N M×N的矩阵;则当b M M M行的向量时,刚好相当于求解线性方程组。其本质是最小二乘法,对于 A x = b Ax=b Ax=b这样的方程组,如果 A A A是满秩仿真,那么可以表示为 x = A − 1 b x=A^{-1}b x=A1b,否则可以表示为 x = ( A T A ) − 1 A T b x=(A^{T}A)^{-1}A^{T}b x=(ATA)1ATb

b M × K M\times K M×K的矩阵时,则对每一列,都会计算一组x

其返回值共有4个,分别是拟合得到的x、拟合误差、矩阵a的秩、以及矩阵a的单值形式。文章来源地址https://www.toymoban.com/news/detail-450270.html

>>> x = np.arange(4)
>>> y = M@x
>>> xhat = np.linalg.lstsq(M,y)
>>> print(xhat[0])
[-2.46640454e-15  1.00000000e+00  2.00000000e+00  3.00000000e+00]

到了这里,关于Python处理矩阵和线性代数问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线性代数的学习和整理23:用EXCEL和python 计算向量/矩阵的:内积/点积,外积/叉积

      目录 1 乘法 1.1 标量乘法(中小学乘法) 1.1.1 乘法的定义 1.1.2 乘法符合的规律 1.2 向量乘法 1.2.1 向量:有方向和大小的对象 1.2.2 向量的标量乘法 1.2.3 常见的向量乘法及结果 1.2.4 向量的其他乘法及结果 1.2.5 向量的模长(长度) 模长的计算公式 1.2.6 距离 2 向量的各种乘法 2

    2024年01月23日
    浏览(51)
  • 线性代数本质系列(一)向量,线性组合,线性相关,矩阵

    本系列文章将从下面不同角度解析线性代数的本质,本文是本系列第一篇 向量究竟是什么? 向量的线性组合,基与线性相关 矩阵与线性相关 矩阵乘法与线性变换 三维空间中的线性变换 行列式 逆矩阵,列空间,秩与零空间 克莱姆法则 非方阵 点积与对偶性 叉积 以线性变换

    2024年02月04日
    浏览(54)
  • 线性代数:线性方程求解、矩阵的逆、线性组合、线性独立

    本文参考www.deeplearningbook.org一书第二章2.3 Identity and Inverse Matrices 2.4 Linear Dependence and Span 本文围绕 线性方程求解 依次介绍矩阵的逆、线性组合、线性独立等线性代数的基础知识点。 本文主要围绕求解线性方程展开,我们先把线性方程写出来,方程如下: 其中,是已知的;,

    2024年02月08日
    浏览(54)
  • 0203逆矩阵-矩阵及其运算-线性代数

    定义7 对于 n n n 阶矩阵A,如果有一个 n n n 阶矩阵B,使 A B = B A = E AB=BA=E A B = B A = E 则说矩阵A是可逆的,并把矩阵B称为A的逆矩阵,简称逆阵。 定理1 若矩阵A可逆,则 ∣ A ∣ ≠ 0 vert Avert not = 0 ∣ A ∣  = 0 证明: A 可逆,即有 A − 1 ,使得 A A − 1 = E ∣ A A − 1 ∣ = ∣ A

    2024年04月13日
    浏览(60)
  • 线性代数基础--矩阵

     矩阵是由排列在矩形阵列中的数字或其他数学对象组成的表格结构。它由行和列组成,并且在数学和应用领域中广泛使用。 元素:矩阵中的每个数字称为元素。元素可以是实数、复数或其他数学对象。 维度:矩阵的维度表示矩阵的行数和列数。一个 m × n 的矩阵有 m 行和

    2024年02月11日
    浏览(47)
  • 线性代数基础【2】矩阵

    一、基本概念 ①矩阵 像如下图示的为矩阵,记为A=(aij)m*n ②同型矩阵及矩阵相等 若A、B为如下两个矩阵 如果A和B的行数和列数相等,那么A和B为同型矩阵,且A和B的元素相等(即:aij=bij),则称A和B相等 ③伴随矩阵 设A为n阶矩阵(如上图所示),设A的行列式|A|,则A中aij的余子式为Mij,代数余

    2024年02月04日
    浏览(53)
  • 线性代数——矩阵

    学习高等数学和线性代数需要的初等数学知识 线性代数——行列式 线性代数——矩阵 线性代数——向量 线性代数——线性方程组 线性代数——特征值和特征向量 线性代数——二次型 本文大部分内容皆来自李永乐老师考研教材和视频课。 从矩阵的转置章节到方阵和行列式

    2023年04月08日
    浏览(271)
  • 线性代数(七) 矩阵分析

    从性线变换我们得出,矩阵和函数是密不可分的。如何用函数的思维来分析矩阵。 通过这个定义我们就定义了矩阵序列的 收敛性 。 研究矩阵序列收敛性的常用方法,是用《常见向量范数和矩阵范数》来研究矩阵序列的极限。 长度是范数的一个特例。事实上,Frobenius范数对

    2024年02月08日
    浏览(50)
  • 投影矩阵推导【线性代数】

    如果两个向量垂直,那么满足。但如果两个向量不垂直,我们就将 b 投影到 a 上,就得到了二者的距离,我们也称为向量 b 到直线 a 的误差。这样就有出现了垂直:                (1) 投影向量 p 在直线上,不妨假设  ,那么误差 。带入式(1)中得到: 投影矩阵:  

    2024年02月06日
    浏览(61)
  • 线性代数-矩阵的本质

    线性代数-矩阵的本质

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包