假设我有一个numpy数组:
import numpy as np
x = np.array((1 + 2j, 2 + 4j, 5 + 10j))
,我想创建两个单独的数组,一个是实数部分,另一个是不带j的复数部分。是否有在python中执行此操作的快捷方式?我能想到的唯一方法就是明确地:
xr = np.zero(len(x))
xi = np.zero(len(x))
for n in range(0, len(x)):
xr[m] = x[n].real
xi[m] = x[n].imag
dunno,似乎应该有一种更快的键入方式...
喜欢
xr = x.real?
xi = x.imag?
答案 0 :(得分:0)
In [145]: x = np.array((1 + 2j, 2 + 4j, 5 + 10j))
In [146]: x
Out[146]: array([1. +2.j, 2. +4.j, 5.+10.j])
real
和imag
属性既适用于整个数组,也适用于元素:
In [147]: x.real
Out[147]: array([1., 2., 5.])
In [148]: x.imag
Out[148]: array([ 2., 4., 10.])
In [149]: xr, xc = x.real, x.imag
In [150]: xr
Out[150]: array([1., 2., 5.])
In [151]: xc
Out[151]: array([ 2., 4., 10.])
@ user3483203建议的view
方法告诉它将相同的数据缓冲区解释为两个浮点数的序列:
In [156]: x.view('(2,)float')
Out[156]:
array([[ 1., 2.],
[ 2., 4.],
[ 5., 10.]])
In [157]: np.dtype('(2,)float')
Out[157]: dtype(('<f8', (2,)))
除非您已经使用结构化数组和复合dtype,否则这种表示法可能会很晦涩。