使用 NumPy 进行线性代数运算
使用 np.dot、np.linalg.inv、np.linalg.eig、np.linalg.solve 求解方程组
使用 NumPy 进行线性代数运算 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
NumPy 中的线性代数
NumPy 通过 @ 运算符和 np.linalg 模块提供矩阵运算,这是几乎所有机器学习算法的基础。
使用 @ 进行矩阵乘法
@ 运算符执行真正的矩阵乘法。内部维度必须匹配:(m,k) @ (k,n) 会得到 (m,n)。
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print(A @ B)
# [[19 22]
# [43 50]]@ 与 *(重要)
* 是逐元素运算,@ 是矩阵乘法。混淆二者是一个经典错误。
print(A * B) # element-wise: [[ 5 12]
# [21 32]]
print(A @ B) # matrix product (different result)np.dot
np.dot 是函数形式。对于二维数组,它等同于 @;对于一维数组,它会计算点积并返回一个标量。
u = np.array([1, 2, 3])
v = np.array([4, 5, 6])
print(np.dot(u, v)) # 1*4 + 2*5 + 3*6 = 32矩阵逆
np.linalg.inv(A) 会返回逆矩阵,即与 A 相乘后得到单位矩阵的矩阵。只有方阵且非奇异的矩阵才存在逆矩阵。
A = np.array([[4.0, 7.0], [2.0, 6.0]])
Ainv = np.linalg.inv(A)
print(np.round(A @ Ainv, 6)) # identity行列式
np.linalg.det(A) 会计算行列式。行列式为 0 表示矩阵是奇异矩阵,无法求逆。
print(np.linalg.det(A)) # 10.0 (nonzero -> invertible)求解线性方程组
要解 A x = b,请优先使用 np.linalg.solve(A, b),而不是计算逆矩阵。这样速度更快,数值稳定性也更好。
A = np.array([[3.0, 1.0], [1.0, 2.0]])
b = np.array([9.0, 8.0])
x = np.linalg.solve(A, b)
print(x) # [2. 3.]为什么使用 solve 而不是 inv
计算 inv(A) @ b 会浪费计算量,并放大舍入误差。solve 会直接使用 LU 分解。在实际代码中,请优先使用 solve。
# Avoid: x = np.linalg.inv(A) @ b
# Prefer: x = np.linalg.solve(A, b)特征值和特征向量
np.linalg.eig(A) 会返回特征值和特征向量。它们是 PCA、稳定性分析等技术的基础。
A = np.array([[2.0, 0.0], [0.0, 3.0]])
vals, vecs = np.linalg.eig(A)
print(vals) # [2. 3.]向量范数和矩阵范数
np.linalg.norm 用于衡量大小。默认情况下,它计算向量的欧几里得范数(L2 范数),从距离计算到正则化都广泛使用。
v = np.array([3.0, 4.0])
print(np.linalg.norm(v)) # 5.0 (sqrt(9+16))
print(np.linalg.norm(v, 1)) # 7.0 (L1 norm)转置
A.T 会对矩阵进行转置,即交换行和列。它经常出现在正规方程等公式中。
A = np.array([[1, 2, 3], [4, 5, 6]])
print(A.T)
# [[1 4]
# [2 5]
# [3 6]]快速检查
请测试您对线性代数知识的掌握程度。
回顾
线性代数工具箱:
- 使用
@/np.dot进行矩阵乘法和点积(而不是*) np.linalg.inv、np.linalg.detnp.linalg.solve(A, b)优于求逆- 使用
np.linalg.eig进行特征分解 - 使用
np.linalg.norm计算大小,使用A.T进行转置
常见问题解答
「使用 NumPy 进行线性代数运算」课时是免费的吗?
是的 — 「使用 NumPy 进行线性代数运算」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「使用 NumPy 进行线性代数运算」这节课中我会学到什么?
使用 np.dot、np.linalg.inv、np.linalg.eig、np.linalg.solve 求解方程组 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「使用 NumPy 进行线性代数运算」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 数组创建与属性
- 索引、切片与花式索引
- 广播与向量化运算
- 使用 NumPy 进行线性代数运算