Python 在函数错误中使用数组
运行代码时,我收到错误“不支持**或pow()的操作数类型:'numpy.ufunc'和'float'” 代码是:Python 在函数错误中使用数组,python,function,numpy,typeerror,curve-fitting,Python,Function,Numpy,Typeerror,Curve Fitting,运行代码时,我收到错误“不支持**或pow()的操作数类型:'numpy.ufunc'和'float'” 代码是: import numpy as np import matplotlib.pyplot as plt from numpy import sqrt,exp,log from scipy import linalg from scipy.optimize import curve_fit data1 = np.loadtxt('decay1.txt', float,skiprows
import numpy as np
import matplotlib.pyplot as plt
from numpy import sqrt,exp,log
from scipy import linalg
from scipy.optimize import curve_fit
data1 = np.loadtxt('decay1.txt', float,skiprows=1)
t = data1[:,0]
n = data1[:,1]
data2 = np.loadtxt('decay2.txt', float,skiprows=1)
T = data2[:,0]
N = data2[:,1]
def Radio(n,t,tao,b):
return (n*(exp**(-(t/tao)))) + b
guesses = (1,1,1)
guesses2 = (1,1,1)
(p0,p1,p2),cc = curve_fit(Radio,t,n,guesses)
(p02,p12,p22),cc2 = curve_fit(Radio,T,N,guesses2)
yfit = Radio(t,p0,p1,p2)
y2fit = Radio(T,p02,p12,p22)
我必须使函数适合放射性衰变数据,所以请告诉我,我是否也弄乱了代码,以便使函数适合它。谢谢你的帮助
numpy.exp
是指数函数,**
是幂运算符,因此您试图将函数定义提升为幂((t/tao))
。我想你想要
def Radio(n,t,tao,b):
return (n*(exp(-(t/tao)))) + b
关于优化函数的使用,有几个问题。首先,您使用n
作为参数(在Radio
方法中)和因变量数据(来自问题陈述),这很容易混淆。我会把它改成类似于a
(如中所用)。这不是真的必要,但有助于可读性
第二,也是更重要的一点,要拟合的函数必须有自变量(在本例中,
t
)作为第一个参数。我认为导致平拟合的原因是,您实际拟合的是曲线n->Radio(n)
(所有其他变量都作为参数),而不是t->Radio(t)
噢,哇!非常感谢,哈哈,我怎么选择这个作为答案?@BrandonSeedlessBananasMc将更新曲线拟合的潜在修复关于你的第二个问题,我没有使用scipy.optimize
,但从文档中我看它是正确的,除了我认为你在f之间切换了输入顺序函数(n,t
)和曲线拟合(t,n
)我收回,公式中似乎有问题。将编辑我的答案和说明