DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

矩阵乘法、求逆、特征值等线性代数运算怎么做?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) 确认维度。

下载推广海报

圈内讨论推广海报

《矩阵乘法、求逆、特征值等线性代数运算怎么做?np.dot 和 @ 有什么区别?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。