ярлык для разделения «сложного массива» на «реальные» и «мнимые» массивы - PullRequest
0 голосов
/ 19 апреля 2019

Допустим, у меня есть пустой массив:

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

Не знаю, просто кажется, что должен быть более быстрый способ набрать это ...

как

xr = x.real?
xi = x.imag?

1 Ответ

0 голосов
/ 19 апреля 2019
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...