Почему этот код не может преобразовать сложное в float? Или я получаю неверный синтаксис - PullRequest
0 голосов
/ 15 мая 2019
import numpy as np
import math
freq2 = np.zeros(N)
freq2[2] = 1+(math.pi/2)j

сводит меня с ума ... это указывает на сложный оператор j

freq2[2] = 1+((math.pi)/2)j
SyntaxError: invalid syntax

, а затем это говорит

freq2[2] = 1+2j

Не удается преобразовать комплекс в число с плавающей точкой

Ответы [ 2 ]

3 голосов
/ 15 мая 2019

Нет оператора j. j является частью синтаксиса мнимого литерала. Как и в MATLAB, если вы хотите преобразовать действительное число в мнимое, вы должны умножить на 1j, а не просто вставить j в конце выражения:

freq2[2] = 1+(math.pi/2)*1j

вместо

freq2[2] = 1+((math.pi)/2)j

Что касается TypeError, в отличие от MATLAB, вы не можете сложить комплексное число в массив с плавающей точкой. Вам нужно с самого начала создать массив со сложным dtype:

freq2 = np.zeros(N, dtype=complex)
1 голос
/ 15 мая 2019

Если вы хотите поместить комплексное значение в массив, массив должен иметь правильный тип dtype для начала:

In [17]: x = np.zeros(3, dtype=complex)                                         
In [18]: x                                                                      
Out[18]: array([0.+0.j, 0.+0.j, 0.+0.j])
In [19]: x[0] = 1 + np.pi/2*1j                                                  
In [20]: x                                                                      
Out[20]: array([1.+1.57079633j, 0.+0.j        , 0.+0.j        ])

Или создание комплексного массива из списка значений:

In [21]: np.array([1+np.pi/2*1j, 0, 1, 23j])                                    
Out[21]: array([1. +1.57079633j, 0. +0.j        , 1. +0.j        , 0.+23.j        ])
...