我已经使用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 assignment
或TypeError: 'Add' object is not callable
或AttributeError: '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)
答案 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是否复杂的方法。