Поэлементное умножение числовых массивов комплексных чисел по широковещанию
Я пытаюсь создать множество Мандельброта, начиная с целого массива комплексных чисел и итерируя соответствующие значения
# 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
Я ожидал бы, что следующие утверждения приведут к Истине, но они не делают.
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
Почему это происходит? Почему сложные (i,i) и i + ij несовместимы? Я думал, что это одно и то же.
0 ответов
Как заявил @Onyambu:
Вам нужны скобки, т.е. (1+1j)**2
. В противном случае вы делаете1+1j*1j
, которое не является квадратом комплексного числа.
Как упомянул @André Sbrocco Figueiredo, причина в том, что вы не использовали фарантазы. Вот исправление:
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
Ура.