矩阵乘法、求逆、特征值等线性代数运算怎么做?np.dot 和 @ 有什么区别?
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
矩阵乘法:`@` 和 `np.dot` 等价,推荐用 `@`(更直观)。
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = A @ B # 矩阵乘法 (2,2)
print(np.dot(A, B)) # 同样结果
# 注意:A * B 是逐元素相乘,不是矩阵乘法!
线性代数常用函数(都在 np.linalg):
np.linalg.inv(A) # 矩阵求逆
np.linalg.det(A) # 行列式
np.linalg.eig(A) # 特征值、特征向量 (eigvals 只要特征值)
np.linalg.svd(A) # 奇异值分解
np.linalg.solve(A, b) # 解线性方程组 A·x = b(比求逆再乘更快更稳)
np.linalg.norm(A) # 范数
@ 和 np.dot 的区别:
- 两者在二维数组上完全等价(矩阵乘法)。
@是运算符,支持高维张量批量矩阵乘法((b,m,n) @ (b,n,k) -> (b,m,k))。np.dot对一维数组按向量内积处理,高维规则不同——统一用 `@` 最省心。
踩坑提示:
1. 形状要求:(m,n) @ (n,k),内维必须相等,否则报错。
2. 别把 *(逐元素)当矩阵乘,这是新手最常犯的错。
3. 计算矩阵乘法前先 print(A.shape, B.shape) 确认维度。
回复
0 条回复