NumPy 是否正确处理 1:1 复数运算的别名?

Does NumPy handle 1:1 aliasing of complex-number operations correctly?

假设 ab 是不相交的一维 complex NumPy 数组,而我 numpy.multiply(a, b, b).
b 是否保证包含与我通过 b[:] = numpy.multiply(a, b) 获得的值相同的值?

我实际上并没有能够产生不正确的结果,但我不知道我是否只是对我的特定编译或平台很幸运,或者我是否真的可以依赖它,因此出现了这个问题。

注意 float(即实数)答案显然是肯定的,因为合理的实现不能让它失败,但对于复数它是通过写实部然后 然后 读虚部,叉乘运算很容易给出不正确的结果:

# say the real part is at [0] and the imaginary part is at [1] and c is the product of a & b
c[0] = a[0] * b[0] - a[1] * b[1]
c[1] = a[0] * b[1] + a[1] * b[0]  # if c[0] overlaps a[0] or b[0] then this is wrong

是的。应该以原子方式处理复杂的值。如果它不能像那样工作,那么这是一个我们将修复的错误。