为什么使用Python的numpy计算复数向量内积结果错误?
numpy vdot 复数向量计算结果解析
问题重现
用户代码:
import numpy as np a = np.array([2+3j]) b = np.array([4+5j]) print(np.vdot(a, b))
运行后得到结果:(23-2j),而非预期的(-7+22j);仅当将a改为np.array([2-3j])时,才会得到(23-2j)。
核心原因:vdot 对复数的特殊处理
np.vdot 函数在处理复数输入时,会自动对第一个参数取共轭复数,再执行点积运算——这是它和普通点积(如np.dot)的关键差异。
计算过程验证
- 对
a取共轭:2+3j的共轭复数为2-3j - 执行点积运算:
(2-3j) * (4+5j) = 2*4 + 2*5j - 3j*4 - 3j*5j = 8 + 10j -12j -15*(-1) # 因 j² = -1 = 8 +15 + (10j-12j) = 23 -2j
该结果与代码运行输出完全一致。
如何得到预期的(-7+22j)
若需要直接用原始复数计算点积(不取共轭),可通过以下两种方式实现:
- 元素相乘后求和:
import numpy as np a = np.array([2+3j]) b = np.array([4+5j]) print(np.sum(a * b)) # 输出 (-7+22j) - 使用
np.dot(一维数组场景下,np.dot不会对复数取共轭):print(np.dot(a, b)) # 同样输出 (-7+22j)
内容的提问来源于stack exchange,提问作者Ali Alind
相关产品推荐
相关产品推荐

