【问题标题】:Element-wise multiplication of numpy arrays of complex numbers by broadcast通过广播对复数的numpy数组进行元素乘法
【发布时间】: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


【解决方案1】:

正如@Onyambu 所说:

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

【讨论】:

    【解决方案2】:

    就像@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
    

    干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      相关资源
      最近更新 更多