SciPy.org 002 numpy解线性方程组

本文详细介绍了NumPy库中的线性代数函数,包括dot、vdot、inner、matmul、determinant、solve和inv等,涵盖了矩阵乘法、点积、行列式计算、线性方程求解及逆矩阵计算等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在菜鸟教程上有比较基础的numpy的入门知识,可以去学习。网址:

https://www.runoob.com/numpy/numpy-tutorial.html

高数里面,我们会先求矩阵的秩(rank)确定是否有解,再用消元法解一般线性方程组。

numpy提供linalg库来完成线性代数方面的工作。

函数描述
dot两个数组的点积,即元素对应相乘
vdot两个向量的点积
inner两个数组的内积
matmul两个数组的矩阵积
determinant数组的行列式
solve求解线性矩阵方程
inv计算矩阵的乘法逆矩阵

 

  1. numpy.dot() 对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为内积);对于二维数组,计算的是两个数组的矩阵乘积;对于多维数组,它的通用计算公式如下,即结果数组中的每个元素都是:数组a的最后一维上的所有元素与数组b的倒数第二位上的所有元素的乘积和: dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])。
  2. numpy.vdot() 函数是两个向量的点积。 如果第一个参数是复数,那么它的共轭复数会用于计算。 如果参数是多维数组,它会被展开。
  3. numpy.inner() 函数返回一维数组的向量内积。对于更高的维度,它返回最后一个轴上的和的乘积。
  4. numpy.matmul 函数返回两个数组的矩阵乘积。 虽然它返回二维数组的正常乘积,但如果任一参数的维数大于2,则将其视为存在于最后两个索引的矩阵的栈,并进行相应广播。

    另一方面,如果任一参数是一维数组,则通过在其维度上附加 1 来将其提升为矩阵,并在乘法之后被去除。

    对于二维数组,它就是矩阵乘法。

  5. numpy.linalg.det() 函数计算输入矩阵的行列式。

    行列式在线性代数中是非常有用的值。 它从方阵的对角元素计算。 对于 2×2 矩阵,它是左上和右下元素的乘积与其他两个的乘积的差。

    换句话说,对于矩阵[[a,b],[c,d]],行列式计算为 ad-bc。 较大的方阵被认为是 2×2 矩阵的组合。

  6. numpy.linalg.solve() 函数给出了矩阵形式的线性方程的解。

  7. numpy.linalg.inv() 函数计算矩阵的乘法逆矩阵。

    逆矩阵(inverse matrix):设A是数域上的一个n阶矩阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=E ,则我们称B是A的逆矩阵,而A则被称为可逆矩阵。注:E为单位矩阵。

求解例子:

\begin{bmatrix} 1 & 1& 1\\ 0& 2& 5\\ 2& 5& -1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ \end{bmatrix} = \begin{bmatrix} 6\\ -4\\ 27 \end{bmatrix}

表示为:\large Ax=b

那么得:\large x=A^{^-1}b

代码如下:

"""
PyQt AND OpenCV
By LiNYoUBiAo
2020/4/9 22:51
"""
import numpy.matlib
import numpy as np
A = np.array([[1, 1, 1], [0, 2, 5], [2, 5, -1]])
b = np.array([[6], [-4], [27]])
# 求A的逆矩阵
Ainv = np.linalg.inv(A)
# 用逆矩阵公式解
print(np.dot(Ainv, b))
# 直接用linalg解
print(np.linalg.solve(A, b))

 

可以看到两个结果是一样的:

矩阵和线性方面的重量级软件是BLAS和LAPACK,Python用的是MKL,

C++下可以用Eigen和Armadillo等等库调用。

多谢,美。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值