如何在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操作,基本不用时间。
我有一个笛卡尔坐标数组
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操作,基本不用时间。