Поэлементное умножение числовых массивов комплексных чисел по широковещанию

Я пытаюсь создать множество Мандельброта, начиная с целого массива комплексных чисел и итерируя соответствующие значения

# 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

Ура.

Другие вопросы по тегам