【发布时间】:2018-10-03 17:02:51
【问题描述】:
我正在尝试通过从整个复数数组开始并迭代适当的值来创建一个 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 不一致? 我以为它们是一样的。
【问题讨论】:
-
你需要括号。即
(1+1j)**2否则你正在做1+1j*1j这不是复数的平方 -
@Onyambu,为我解决了这个问题。如果您将评论添加为答案,我会接受。
标签: python-3.x numpy complex-numbers array-broadcasting