Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在函数错误中使用数组_Python_Function_Numpy_Typeerror_Curve Fitting - Fatal编程技术网

Python 在函数错误中使用数组

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

运行代码时,我收到错误“不支持**或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=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
)我收回,公式中似乎有问题。将编辑我的答案和说明