Python NumPy 提供了一个强大的线性代数模块,可以用于进行矩阵运算、求解线性方程组、计算特征值和特征向量等。NumPy 是处理线性代数问题的强大工具。可以通过它们来实现从简单的矩阵运算到复杂的数值分析和线性系统的求解。

1、矩阵和向量积

矩阵和向量积可以用 numpy.dot() 函数来计算。numpy.dot() 函数的两个参数分别是矩阵和向量。

1)矩阵积

矩阵积是两个矩阵相乘的结果。矩阵积的计算方法是将矩阵的每一行与另一个矩阵的每一列相乘,然后将各个相乘结果相加。

代码如下,

import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

C = np.dot(A, B)

print(C)

2)向量积

向量积是两个向量相乘的结果。向量积的计算方法是将两个向量的每一维度相乘,然后将各个相乘结果相加。

import numpy as np

a = np.array([1, 2])
b = np.array([3, 4])

c = np.dot(a, b)

print(c)

2、矩阵特征值与特征向量

在线性代数中,特征值和特征向量是矩阵的一个重要概念。特征值是矩阵可以对其乘法的标量,而特征向量是特征值对应的向量。Python NumPy 提供了 numpy.linalg.eig() 函数来计算矩阵的特征值和特征向量。numpy.linalg.eig() 函数的返回值是一个元组,第一个元素是特征值,第二个元素是特征向量。

代码如下,

import numpy as np

A = np.array([[1, 2], [3, 4]])

w, v = np.linalg.eig(A)

print(w)
print(v)

3、矩阵分解

矩阵分解是将一个矩阵分解为多个矩阵的一种方法。矩阵分解有许多种不同的方法,每种方法都有其不同的应用。

1)奇异值分解

NumPy 提供了 numpy.linalg.svd() 函数来实现奇异值分解。numpy.linalg.svd() 函数的返回值是一个元组,第一个元素是奇异值矩阵,第二个元素是左奇异向量矩阵,第三个元素是右奇异向量矩阵。

代码如下,

import numpy as np

A = np.array([[1, 2], [3, 4]])

U, Σ, V = np.linalg.svd(A)

print(U)
print(Σ)
print(V)

2)QR分解

QR 分解是将矩阵分解为两个矩阵的一种方法,其中一个矩阵是正交矩阵,另一个矩阵是上三角矩阵。NumPy 提供了 numpy.linalg.qr() 函数来实现 QR 分解。numpy.linalg.qr() 函数的返回值是一个元组,第一个元素是正交矩阵,第二个元素是上三角矩阵。

代码如下,

import numpy as np

A = np.array([[1, 2], [3, 4]])

Q, R = np.linalg.qr(A)

print(Q)
print(R)

3)Cholesky分解

Cholesky 分解是将对称正定的矩阵分解为两个下三角矩阵的一种方法。NumPy 提供了 numpy.linalg.cholesky() 函数来实现 Cholesky 分解。numpy.linalg.cholesky() 函数的返回值是一个矩阵,即下三角矩阵 L。

代码如下,

import numpy as np

A = np.array([[1, 2], [2, 5]])

L = np.linalg.cholesky(A)

print(L)

4、矩阵的范数

在线性代数中,范数是用来衡量向量或矩阵大小的一种方法。范数有许多种不同的定义,每种定义都有其不同的意义。NumPy 中矩阵范数的使用非常简单,只需调用相应的函数即可。numpy.linalg.norm(x, ord=None)ord 参数用于指定范数类型

代码如下,

import numpy as np

A = np.array([[1, 2, 3, 4], [2, 3, 5, 8],
              [1, 3, 5, 7], [3, 4, 7, 11]])

print(A)

print(np.linalg.norm(A, ord=1))  # 30.0
print(np.max(np.sum(A, axis=0)))  # 30

print(np.linalg.norm(A, ord=2))  
# 20.24345358700576
print(np.max(np.linalg.svd(A, compute_uv=False)))  
# 20.24345358700576

print(np.linalg.norm(A, ord=np.inf))  # 25.0
print(np.max(np.sum(A, axis=1)))  # 25

print(np.linalg.norm(A, ord='fro'))  
# 20.273134932713294
print(np.sqrt(np.trace(np.dot(A.T, A))))  
# 20.273134932713294

5、方阵的行列式

在线性代数中,行列式是矩阵的一个重要特征,它可以用于计算矩阵的特征值、逆矩阵等。NumPy 提供了 numpy.linalg.det() 函数来计算矩阵的行列式。numpy.linalg.det() 函数的参数是一个矩阵,返回值是矩阵的行列式。

代码如下,

import numpy as np

A = np.array([[1, 2], [3, 4]])

print(np.linalg.det(A))

6、矩阵的秩

在线性代数中,矩阵的秩是指矩阵中线性无关列向量的最大个数。矩阵的秩可以用于判断矩阵是否可逆、是否满秩等。NumPy 提供了 numpy.linalg.matrix_rank() 函数来计算矩阵的秩。numpy.linalg.matrix_rank() 函数的参数是一个矩阵,返回值是矩阵的秩。

代码如下,

import numpy as np

A = np.array([[1, 2], [3, 4]])

rank = np.linalg.matrix_rank(A)

print(rank)

7、矩阵的迹

在线性代数中,迹是指矩阵对角线元素之和。矩阵的迹可以用于计算矩阵的一些特征值、特征向量等。NumPy 提供了 numpy.trace() 函数来计算矩阵的迹。numpy.trace() 函数的参数是一个矩阵,返回值是矩阵的迹。

代码如下,

import numpy as np

A = np.array([[1, 2], [3, 4]])

trace = np.trace(A)

print(trace)

8、逆矩阵

在线性代数中,逆矩阵是指与原矩阵相乘等于单位矩阵的矩阵。矩阵的逆矩阵可以用于求解线性方程组、计算矩阵的特征值等。NumPy 提供了 numpy.linalg.inv() 函数来计算矩阵的逆矩阵。numpy.linalg.inv() 函数的参数是一个矩阵,返回值是矩阵的逆矩阵。

代码如下,

import numpy as np

A = np.array([[1, 2], [3, 4]])

inv_A = np.linalg.inv(A)

print(inv_A)

9、求解线性方程组

在线性代数中,线性方程组是指由一个或多个未知数和多个线性方程组成的方程组。线性方程组的解就是满足所有方程的未知数组成的向量。NumPy 提供了 numpy.linalg.solve() 函数来求解线性方程组。numpy.linalg.solve() 函数的参数是系数矩阵和常数向量,返回值是解向量。

import numpy as np

A = np.array([[1, 2], [3, 4]])
b = np.array([5, 6])

x = np.linalg.solve(A, b)

print(x)