Поэлементное умножение числовых массивов комплексных чисел по широковещанию - PullRequest
0 голосов
/ 03 октября 2018

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

# 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

Почему этопроисходит?Почему сложные (i, i) и i + ij несовместимы?Я думал, что это одно и то же.

...