如何在numpy中将笛卡尔坐标转换为复数

How to convert cartesian coordinates to complex numbers in numpy

我有一个笛卡尔坐标数组

xy = np.array([[0,0], [2,3], [3,4], [2,5], [5,2]])

我想将其转换为表示相同的复数数组:

c = np.array([0, 2+3j, 3+4j, 2+5j, 5+2j])

我目前的解决方案是这样的:

c = np.sum(xy * [1,1j], axis=1)

这可行,但对我来说似乎很粗糙,并且可能有一个更好的版本,使用 np.complex() 或类似的一些内置魔法,但我发现使用它的唯一方法是

c = np.array(list(map(lambda c: np.complex(*c), xy)))

这看起来不像是改进。

任何人都可以指点我一个更好的解决方案,也许使用我不了解的许多 numpy 函数之一(是否有一个 numpy.cartesian_to_complex() 在我尚未找到的数组上工作还没有?),或者在应用运算符的巧妙组合时使用一些隐式转换?

怎么样

c=xy[:,0]+1j*xy[:,1]

xy[:,0] 将给出 xy 的第 0 列中所有元素的数组,而 xy[:,1] 将给出第 1 列的所有元素.

xy[:,1]乘以1j使其成为虚数,然后将结果与xy[:,0]相加。

认识到complex128只是一对花车。然后,在将 dtype 从 int 转换为 float 之后,您可以使用免费的 "view" 来执行此操作(我猜您的真实代码可能已经这样做了):

xy.astype(float).view(np.complex128)

astype() 将整数转换为浮点数,这需要构建一个新数组,但一旦完成,view() 就运行时而言是 "free"。

以上给你shape=(n,1);你可以 np.squeeze() 它来删除额外的维度。这也是一个view操作,基本不用时间。