我试图用步进函数拟合一组数据。但它不起作用。为了简单起见,这就是我想要做的。
我有一组数据。从x = 0到x = y,曲线遵循x ^ 2。从x = y到x = 100,它是0.
我的想法是找到最合适的,以便我有一个y值。它不起作用,因为它说:NumPy布尔数组索引赋值不能将710输入值分配给掩码为true的323输出值。
这是我的代码。我在每列中有710个值。
import numpy as np
from pylab import *
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
data = np.genfromtxt('myfile.txt',delimiter='\t')
xdata = data[:,0]
ydata = data[:,1]
x = np.linspace(0,230,710)
def func(x,a,y):
c=np.zeros(710)
c[x<y] = a*(x-y)**2
c[x>y] = 0
return c
popt, pcov = curve_fit(func, xdata, ydata, p0 = [0.0001,50])
print a
print t
谢谢!
答案 0 :(得分:0)
你得到的例外是因为c[x<y] = a*(x-y)**2
。左侧有323个值,右侧有710个值。这是因为条件x < y
也应该在右侧:
import numpy as np
from scipy.optimize import curve_fit
a = 5
y = 47
xdata = np.linspace(0, 100, 710)
ydata = a*xdata**2
ydata[xdata > y] = 0
def func(x, a, y):
c = np.zeros(710)
c[x < y] = a*(x[x < y]**2)
c[x >= y] = 0
return c
popt, pcov = curve_fit(func, xdata, ydata, p0 = [6, 46.5])
print popt