如何在numpy中制作二维复数数组?

wqsoz72f  于 2023-01-26  发布在  其他
关注(0)|答案(2)|浏览(276)

我想做一个复数均匀分布的二维数组,复数平面的一部分,例如(-1,1 i),(-1,-1i),(1,1 i),(1,-1i),每个维度有20个数字。
我知道我可以用np.linspace来计算一维复数,如下所示:

import numpy as np

complex_array = np.linspace(0, complex(1, 1), num = 11)
print(complex_array)

[0. +0.j, 0.1+0.1j, 0.2+0.2j, 0.3+0.3j, 0.4+0.4j,
 0.5+0.5j, 0.6+0.6j, 0.7+0.7j, 0.8+0.8j, 0.9+0.9j, 1. +1.j ]

但是我不知道如何在二维空间中生成这个来得到一个复平面的一部分?
有些类似的问题提到了np.mgrid,但示例使用的是实数,我希望数组包含dtype=complex,这样我的数学就简单了。
也许我只是错过了一些东西,也许只是一个简单的例子就能解释很多。

q7solyqu

q7solyqu1#

复数没有什么魔力--它们只是表达二维空间的一种方式。你可以使用np.meshgrid(参见here)定义二维笛卡尔网格,然后将坐标组合成复数。
创建将跨越二维网格(或复平面)的向量
一米一米一x一米二米一x
创建二维坐标阵列
real_grid, imag_grid = np.meshgrid(real_points, imag_points)
组合成复杂数组:
complex_array = real_grid + imag_grid * 1j
这将生成一个11x11 complex128阵列。

hpxqektj

hpxqektj2#

您可以使用broadcasting来执行此操作。例如:

result = np.linspace(0, 1j, num = 11).reshape(-1, 1) + np.linspace(0, 1, num = 11)

使用meshgrid也可以,但速度可能较慢:

a, b = np.meshgrid(np.linspace(0, 1, num = 11), np.linspace(0, 1j, num = 11))
result = a + b

相关问题