好的,这个问题可能有一个非常简单的答案,但我已经搜索了很长一段时间没有运气
我想得到复平面空间中两个复数的点积。然而,np.dot和np.vdot都给出了错误的结果
我想做的示例:
a = 1+1j
b = 1-1j
dot(a,b) == 0
我实际得到的是:
np.dot(a,b) == 2+0j
np.vdot(a,b) == 0-2j
np.conj(a)*b == 0-2j
我可以使用这个相当笨拙的表达式获得我想要的内容(编辑以便于阅读):
a.real*b.real + a.imag*b.imag
但我很惊讶没有找到一个好的ufunc来做这件事。它不存在吗?我没想到要编写自己的ufunc来矢量化这样一个常见的操作
我在这里关注的一部分是,我的表达式似乎在做大量额外的工作,提取出实部/虚部,而它们应该已经在相邻的内存位置中(考虑到a,b实际上已经组合在类似complex64的数据类型中)。这有可能导致相当严重的经济放缓
**编辑
使用Numba,我最终定义了一个ufunc:
@vectorize
def cdot(a, b):
return (a.real*b.real + a.imag*b.imag)
这使我能够正确地关联复杂数据。这是一张帮助我的人的相关图片
对于数组和
np.complex
标量,而不是普通pythoncomplex
数字,您可以将viewcast转换为float。例如:现在,例如,所有成对点积:
相关问题 更多 >
编程相关推荐