如何用nan代替虚数?

时间:2018-07-04 12:02:09

标签: python python-3.x replace sympy complex-numbers

我已经使用Sympy计算了值。其中一些很复杂,但是我不想要它们。在将它们写到列表中之前,我想用一个nan代替虚数。

我尝试了各种代码,例如:

 if x1(complex=true):
        x1 = nan

 if isinstance(x1, complex):
        x1 = nan

 x1[np.imag(x1) != 0] = nan

 x1[im(x1) != 0] = nan

我收到如下错误消息:'Add' object does not support item assignmentTypeError: 'Add' object is not callableAttributeError: 'Add' object has no attribute 'imag'

这是用于示例一个虚数:

5.62945452911547 - 82.1982564324793*I

有什么想法吗?

这是我的脚本:

# Bibliotheken importieren
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
import pandas as pd
import formel_ShaoLu
from sympy import *
from matplotlib.colors import ListedColormap

e = 10  # Anzahl Zeilen, die durchlaufen werden

print('Datei einlesen')
## Aus Datei lesen mit genfromtxt und ausgeben
data = np.genfromtxt(dateiname3, skip_header=1, usecols=(0,1,4), delimiter='\t', invalid_raise=False, filling_values=0)
print('Datei eingelesen')
xx = data[0:e,0]
yy = data[0:e,1]
velocity_1d = data[0:e,2]

# definiere Dataframe
vel_Coord = {'x':xx,
             'y':yy,
             'velocity': velocity_1d}       # in mm/s, muss im Modul umgerechnet werden!
df = pd.DataFrame(vel_Coord)
print('Dataframe wurde erzeugt')

# Geschwindigkeit in Durchmesser umrechnen
diameter1 = []
diameter2 = []
d, u1 = symbols('d, u1')
result = solve(formel_ShaoLu.u(d, u1), d)   # löst die Gleichung vorab
print(result)
for x in df.velocity:
    x1 = result[0].subs(u1,x).evalf()       # subs ersetzt u1 mit x
    x2 = result[1].subs(u1, x).evalf()      # evalf löst die Gleichung mit dem eingesetzten x
    x1 = x1/10**(-6)
    x2 = x2/10**(-6)

在这里,我想检查该值是否是虚数,然后将其替换为nan

    # print(x1)
    # if x1.imag != 0:
    #     x1 = nan
    print('is it complex?')
    if x1(complex=true):
        x1 = nan
        print('It is complex')
    # x1[np.imag(x1) != 0] = nan
    # x2[x2.imag != 0] = nan
    diameter1.append(x1)                    # erstellt eine Liste von x1
    diameter2.append(x2)
df['diameter1'] = diameter1
df['diameter2'] = diameter2
print(df.diameter1)
print(df.diameter2)

然后用u(d,u1)进行我的调制:

from sympy import *     

## Berechnung Geschwindigkeit u
def u(d, u1):
    return (A_N*(sigma_p(temp, roh_titan)*g*d+gamma/(roh_ar(temp)*d)))**(1/2)-u1*10**(-3)    # Geschwindigkeit wird von mm/s in m/s umgerechnet

## Berechnung Dichte Argon
def roh_ar(temp):
    return p*M_Ar/(R*temp)


## Berechnung Verhältnis der Dichte
def sigma_p(temp, roh_titan):
    return roh_titan/roh_ar(temp)

1 个答案:

答案 0 :(得分:0)

可以是格式问题吗?当我键入

import sympy
x1 = 5.62945452911547 - 82.1982564324793*I

在我的IPython控制台中,出现以下错误

Traceback (most recent call last):

File "<ipython-input-1-2caa666b2f5b>", line 1, in <module>
    x1 = 5.62945452911547 - 82.1982564324793*I

NameError: name 'I' is not defined

我无法测试整个代码,因为我的计算机上没有安装所有软件包。进行x1 = result[0].subs(u1,x).evalf()时可以分解结果吗?

但是,isinstance(x, complex)通常是测试x1是否复杂的方法。