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.])
Подход view
, который предлагает @ user3483203, подсказывает ему интерпретировать один и тот же буфер данных как последовательность двух операций с плавающей запятой:
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,)))
Эта запись может быть неясной, если вы уже не работали со структурированными массивами и составными dtypes.