醋醋百科网

Good Luck To You!

NumPy的各种矩阵计算方法_numpy的矩阵乘法

本节通过一系列简单的小例子,逐一展示矩阵的各种计算方法。每个例子都会包含代码、输出结果以及简要说明,希望帮助我们更好地理解和应用矩阵计算功能。

  1. 矩阵乘法:使用 np.dot(A, B)A @ B
  2. 矩阵转置:使用 A.T
  3. 矩阵求逆:使用 np.linalg.inv(A),但需确保矩阵可逆。
  4. 矩阵行列式:使用 np.linalg.det(A)
  5. 特征值和特征向量:使用 np.linalg.eig(A)
  6. 矩阵的迹:使用 np.trace(A)
  7. 矩阵的范数:使用 np.linalg.norm(A)
  8. 矩阵的幂:使用 np.linalg.matrix_power(A, n)
  9. 奇异值分解:使用 np.linalg.svd(A)


#01 矩阵乘法

矩阵乘法是线性代数中的一个核心操作,它将两个矩阵相乘,生成一个新的矩阵。假设我们有两个矩阵 A 和 B,其中 A 是一个 m×n 的矩阵,B 是一个 n×p 的矩阵,那么它们的乘积 C 是一个 m×p 的矩阵,计算公式如下:

简单来说,矩阵乘法的结果是通过将第一个矩阵的每一行与第二个矩阵的每一列对应元素相乘并求和得到的。

import numpy as np

# 创建两个矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# 使用 np.dot 实现矩阵乘法
C = np.dot(A, B)
print("矩阵 A 和 B 的乘积:")
print(C)

# 使用 np.matrix 实现矩阵乘法 或者使用 @ 运算符 
C = A @ B
print("矩阵 A 和 B 的乘积(使用 @ 运算符):")
print(C)

# 输出:
# 矩阵 A 和 B 的乘积:
# [[19 22]
#  [43 50]]
# 矩阵 A 和 B 的乘积(使用 @ 运算符):
# [[19 22]
#  [43 50]]
# 第一个矩阵的每一行与第二个矩阵的每一列对应元素相乘并求和得到的。

# 计算示例
# [1 2] * 【5 7】 = 1*5 + 2*7 = 19
# [1 2] * 【6 8】 = 1*6 + 2*8 = 22
# [3 4] * 【5 7】 = 3*5 + 4*7 = 43
# [3 4] * 【6 8】 = 3*6 + 4*8 = 50

np.dot 接受两个数组作为输入,并返回它们的点积。对于二维数组,np.dot 实现的是标准的矩阵乘法。


#02 矩阵转置

矩阵转置是线性代数中的一个基本操作,它将矩阵的行和列互换。在 NumPy 中,矩阵转置可以通过多种方式实现,最常用的是使用 .T 属性或 np.transpose() 函数。

使用 .T属性

A = np.array([[1, 2], [3, 4]])
print("矩阵 A:")
print(A)

# 矩阵转置
A_transpose = A.T
print("矩阵 A 的转置:")
print(A_transpose)

# 输出:
# 矩阵 A:
# [[1 2]
#  [3 4]]
# 矩阵 A 的转置:
# [[1 3]
#  [2 4]]


使用 np.transpose()函数

import numpy as np

# 创建一个矩阵
B = np.array([[10, 20],
              [30, 40],
              [50, 60]])

print("原始矩阵 B:")
print(B)

# 使用 np.transpose() 函数进行转置 
B_transpose = np.transpose(B)
print("矩阵 B 的转置:")
print(B_transpose)

# 输出:
# 原始矩阵 B:
# [[10 20]
#  [30 40]
#  [50 60]]
# 矩阵 B 的转置:
# [[10 30 50]
#  [20 40 60]]

np.transpose() 是一个函数,也可以用来实现矩阵转置。它与 .T 的效果完全相同,但 np.transpose() 提供了更多的灵活性,例如可以指定轴的顺序。


#03 矩阵求逆

矩阵求逆是线性代数中的一个重要操作,它找到一个矩阵的逆矩阵,使得原矩阵与逆矩阵的乘积为单位矩阵,比较复杂。

在 NumPy 中,矩阵求逆可以通过 np.linalg.inv() 函数实现。

A = np.array([[1, 2], [3, 4]])
print("矩阵 A:")
print(A)

# 矩阵求逆
try:
    A_inv = np.linalg.inv(A)
    print("矩阵 A 的逆矩阵:")
    print(A_inv)
except np.linalg.LinAlgError:
    print("矩阵 A 不可逆")

# 输出:
# 矩阵 A:
# [[1 2]
#  [3 4]]
# 矩阵 A 的逆矩阵:
# [[-2.   1. ]
#  [ 1.5 -0.5]]

矩阵求逆要求矩阵是方阵且行列式不为零。


#04 矩阵行列式

A = np.array([[1, 2], [3, 4]])
print("矩阵 A:")
print(A)

# 矩阵行列式
det_A = np.linalg.det(A)
print("矩阵 A 的行列式:", det_A)

# 输出:
# 矩阵 A:
# [[1 2]
#  [3 4]]
# 矩阵 A 的行列式: -2.0

行列式是一个标量,用于判断矩阵是否可逆(行列式不为零时矩阵可逆)。


#05 矩阵的特征值和特征向量

A = np.array([[1, 2], [3, 4]])
print("矩阵 A:")
print(A)

# 矩阵的特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)
print("矩阵 A 的特征值:", eigenvalues)
print("矩阵 A 的特征向量:")
print(eigenvectors)

# 输出:
# 矩阵 A:
# [[1 2]
#  [3 4]]
# 矩阵 A 的特征值: [ 5.37228132 -0.37228132]
# 矩阵 A 的特征向量:
# [[-0.41597356 -0.82456484]
#  [ 0.90937671 -0.56576746]]

特征值和特征向量满足 A·特征向量=特征值·特征向量。


#06 矩阵的迹

A = np.array([[1, 2], [3, 4]])
print("矩阵 A:")
print(A)

# 矩阵的迹
trace_A = np.trace(A)
print("矩阵 A 的迹:", trace_A)

# 输出:
# 矩阵 A:
# [[1 2]
#  [3 4]]
# 矩阵 A 的迹: 5

矩阵的迹是主对角线元素的和。


#07 矩阵的范数

A = np.array([[1, 2], [3, 4]])
print("矩阵 A:")
print(A)

# 矩阵的范数
norm_A = np.linalg.norm(A)
print("矩阵 A 的范数:", norm_A)

# 输出:
# 矩阵 A:
# [[1 2]
#  [3 4]]
# 矩阵 A 的范数: 5.4649857

范数用于衡量矩阵的“大小”,常用的是 Frobenius 范数。


#08 矩阵的幂

A = np.array([[1, 2], [3, 4]])
print("矩阵 A:")
print(A)

# 矩阵的幂
A_squared = np.linalg.matrix_power(A, 2)
print("矩阵 A 的平方:")
print(A_squared)

# 输出:
# 矩阵 A:
# [[1 2]
#  [3 4]]
# 矩阵 A 的平方:
# [[ 7 10]
#  [15 22]]

矩阵的幂是矩阵与自身相乘多次的结果。


#09 矩阵的奇异值分解 (SVD)

A = np.array([[1, 2], [3, 4]])
print("矩阵 A:")
print(A)

# 矩阵的奇异值分解
U, S, Vt = np.linalg.svd(A)
print("矩阵 A 的奇异值分解:")
print("U 矩阵:")
print(U)
print("奇异值:", S)
print("Vt 矩阵:")
print(Vt)

# 输出:
# 矩阵 A:
# [[1 2]
#  [3 4]]

# 矩阵 A 的奇异值分解:

# U 矩阵:
# [[-0.40455358 -0.9145143 ]
#  [-0.9145143   0.40455358]]

# 奇异值: [5.37228132 0.37228132]

# Vt 矩阵:
# [[-0.57604844 -0.81741556]
#  [-0.81741556  0.57604844]]

奇异值分解将矩阵分解为三个矩阵 U、Σ 和 V^T,其中 Σ 是对角矩阵,对角线上的元素是奇异值。


通过这些小例子,可以清晰地看到矩阵的各种计算方法及其结果。希望这些示例能帮助你更好地理解它们!

- END-

点击关注,免费获取打包整理的学习资料,内容包含但不限于电子书、教程、源码

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言