通过广播对复数的 numpy 数组进行逐元素乘法

Element-wise multiplication of numpy arrays of complex numbers by broadcast

我正在尝试通过从整个复数数组开始并迭代适当的值来创建一个 mandelbrot 集

# int array
int_array = np.array([i for i in range(10)])
squared_int = int_array ** 2
squares = np.array([i**2 for i in range(10)])
squared_int == squares

这给出了我期望的输出。包含数字 0-9

的平方的数组
# complex array
complex_array = np.array([complex(i,i) for i in range(10)])
squared_complex = complex_array ** 2
complex_squares = np.array([complex(i,i)*complex(i,i) for i in range(10)])
squared_complex == complex_squares # array of True

我希望以下语句产生 True,但它们没有。

1+1j * 1+1j == complex_squares[1]
2+2j * 2+2j == squared_complex[2]

complex_squares 和 squared_complex 的内容如下所示:

array([0.  +0.j, 0.  +2.j, 0.  +8.j, 0. +18.j, 0. +32.j, 0. +50.j,
   0. +72.j, 0. +98.j, 0.+128.j, 0.+162.j])

我也尝试检查 complex(i,i) 是否等价于 i+ij,结果很奇怪:

complex(1,1) == 1+1j # True
complex(1,1) ** 2 == 1+1j**2 # False
complex(1,1) ** 2 # 2j
1+1j ** 2         # 0j
1+1j * 1+1j       # 1+2j
complex(1,1) * complex(1,1) # 2j

为什么会这样? 为什么 complex(i,i) 和 i+ij 不一致? 我还以为是一样的呢

如@Onyambu所述:

您需要括号,即 (1+1j)**2。否则你正在做 1+1j*1j,这不是复数的平方。

就像@André Sbrocco Figueiredo 提到的那样,原因是您没有使用 pharantases。这是修复:

print(complex(1,1) == 1+1j) # True
print(complex(1,1) ** 2 == (1+1j)**2) # True
print(complex(1,1) ** 2) # 2j
print((1+1j) ** 2) # 2j
print((1+1j) * (1+1j)) # 2j
print(complex(1,1) * complex(1,1)) # 2j

干杯。