Matlab与Numpy复数向量内积结果不一致问题咨询
复数向量内积:Matlab与Numpy结果差异的原因及解决办法
问题根源
Matlab(Octave)和Numpy对复数向量内积的定义规则不同:
- Matlab中
a*b'计算的是厄米内积(Hermitian Inner Product):先对向量a的每个元素取共轭,再与b的对应元素相乘后求和,这是数学领域标准的复数内积定义,等价于:sum(conj(a) .* b) - Numpy中
a@b(或np.dot(a,b))计算的是普通元素点积:直接将两个向量的对应元素相乘后求和,不对任何向量做共轭处理,等价于:sum(a * b)
解决方法
要在Numpy中得到与Matlab完全一致的结果,需要显式对第一个向量取共轭后再计算内积,常用三种实现方式:
使用
np.vdot函数(专门用于计算厄米内积):import numpy as np a = np.array([-0.21+0.58j, -0.02-0.23j, 0.23-0.39j]) b = np.array([1.41-1.63j, -0.46+0.69j, -1.11+1.08j]) result = np.vdot(a, b) # 输出结果:(-2.0675+0.7796j)手动对
a取共轭后用@运算符:result = np.conj(a) @ b手动实现共轭相乘求和:
result = np.sum(np.conj(a) * b)
以上三种方式均可得到与Matlaba*b'完全匹配的计算结果。
内容的提问来源于stack exchange,提问作者Lucas Hermann
相关产品推荐
相关产品推荐

