NumPy 的线性代数模块为我们提供了多种方法,以便在任何 NumPy 数组上应用线性代数运算。我们可以使用它来:
- 查找数组的秩、行列式、迹等。
- 计算矩阵的特征值。
- 进行矩阵和向量乘积(点积、内积、外积等)、矩阵幂运算。
- 求解线性或张量方程等等!
示例:
Python
CODEBLOCK_2baad3c6
输出结果
> Rank of A: 3
> Trace of A: 11
> Determinant of A: -306.0
> Inverse of A:
> [[ 0.17647059 -0.00326797 -0.02287582]
> [ 0.05882353 -0.13071895 0.08496732]
> [-0.11764706 0.1503268 0.05228758]]
> Matrix A raised to power 3:
> [[336 162 228]
> [406 162 469]
> [698 702 905]]
矩阵和向量乘积
使用 dot() 函数: 它返回两个数组的点积。它既适用于 1D 数组(向量),也适用于 2D 数组(矩阵)。当在 2D 数组上使用时,它执行矩阵乘法。
对于 N 维数组,它是 a 的最后一个轴和 b 的倒数第二个轴的求和积:
> dot(a, b)[i, j, k, m] = sum(a[i, j, :] * b[k, :, m])
Python
CODEBLOCK_456dbee9
输出结果
Dot Product of scalar values: 20
Dot Product: (-7+22j)
原理解释:
> a = 2 + 3j
> b = 4 + 5j
>
> 现在,计算点积
> = 2(4 + 5j) + 3j(4 – 5j)
> = 8 + 10j + 12j – 15
> = -7 + 22j
使用 vdot() 函数: 该函数也返回点积,但有一个关键区别:它在乘法之前对第一个参数取复共轭。这使得它对于复数数组非常有用。
Python
CODEBLOCK_c90d68f8
输出结果
Dot Product: (23-2j)
原理解释:
> a = 2 + 3j
> b = 4 + 5j
>
> 根据方法,取 a 的共轭,即 2 – 3j
> 现在,计算点积 = 2(4 – 5j) + 3j(4 – 5j)
> = 8 – 10j + 12j + 15
> = 23 – 2j
常用矩阵和向量乘积函数
下表列出了用于执行各种类型的矩阵和向量乘法的常用 NumPy 函数:
描述
—
两个数组的矩阵乘积。
两个数组的内积。
计算两个向量的外积。
在单个函数调用中计算两个或多个数组的点积,并自动选择最快的求值顺序。
沿指定轴计算数组(>= 1维)的张量点积。
根据爱因斯坦求和约定对操作数进行求值。
通过考虑中间数组的创建来评估 einsum 表达式的最低成本收缩顺序。
将方矩阵提升到(整数)n 次幂。
两个数组的克罗内克积。## 求解方程与矩阵求逆
使用 linal.solve() 函数: 它用于求解形如 Ax = b 的线性方程组的精确解,其中:
- A 是系数矩阵
- b 是常数矩阵/常数项向量
- x 是我们要求解的未知数
Python
CODEBLOCK_75dfdc74
输出结果
(‘Solution of linear equations:‘, array([2., 3.]))
使用 linalg.lstsq() 函数: 当方程组没有精确解(例如,它是超定系统)时,可以通过最小化预测值与实际值之间的差值来找到最佳拟合解。
Python
CODEBLOCK_c1ccabcd
输出结果
常用矩阵求解与求逆函数
以下是一些最常用的函数,用于求解矩阵、求逆矩阵或计算伪逆:
描述
—
求解张量方程 a x = b,其中 x 是未知张量。
计算矩阵的(乘法)逆矩阵。
计算矩阵的(Moore-Penrose)伪逆。
计算 N 维数组的逆。