You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么使用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)的关键差异。

计算过程验证

  1. 对 a 取共轭:2+3j 的共轭复数为 2-3j
  2. 执行点积运算:
    (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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:50:55