Python 如何将一组等间距平行线拟合到数据网格
我想使用最小二乘最小化技术将一组等距平行线拟合到数据网格中。我能够将独立的平行线拟合到我的数据中。但是,正如预期的那样,拟合结果的y截距并非等距分布 以下是我到目前为止的情况:Python 如何将一组等间距平行线拟合到数据网格,python,numpy,least-squares,data-fitting,scipy-optimize,Python,Numpy,Least Squares,Data Fitting,Scipy Optimize,我想使用最小二乘最小化技术将一组等距平行线拟合到数据网格中。我能够将独立的平行线拟合到我的数据中。但是,正如预期的那样,拟合结果的y截距并非等距分布 以下是我到目前为止的情况: import numpy as np import matplotlib.pyplot as plt x = np.array([1, 2, 3]) y1 = np.array([60.8, 60.5, 60.5]) y2 = np.array([377.6, 376.8, 377.7]) y3 = np.array(
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3])
y1 = np.array([60.8, 60.5, 60.5])
y2 = np.array([377.6, 376.8, 377.7])
y3 = np.array([695.4, 695.8, 695.5])
fit_1 = np.polyfit(x,y1,0)
fit_2 = np.polyfit(x,y2,0)
fit_3 = np.polyfit(x,y3,0)
plt.plot(x,y1,'*',x,y2,'*',x,y3,'*')
for line in fit_1,fit_2,fit_3:
plt.axhline(line, color='r')
适合水平数据的平行线:
有没有人对如何将每个后续平行线之间的间距限制为相等有什么想法
谢谢大家! 如果您按照以下方式转换数据,则可以绘制一条直线到此点
xNew=[0, 0, 0, 1, 1, 1, 2, 2, 2]
y =np.concatenate([y1,y2,y3])
这一行应该是y=mx+c,在这种拟合中,x是数据集的索引
例如,我们可以说y1=m*0+c,y2=m*1+c等等
您可以使用此选项调整y1、y2、y3,然后像刚才一样拟合直线和打印
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3])
y1 = np.array([60.8, 60.5, 60.5])
y2 = np.array([377.6, 376.8, 377.7])
y3 = np.array([695.4, 695.8, 695.5])
xNew=[0, 0, 0, 1, 1, 1, 2, 2, 2]
y =np.concatenate([y1,y2,y3])
fit = np.polyfit(xNew,y, 1)
y1New = [fit[0]*0 + fit[1]] *3
y2New = [fit[0]*1 + fit[1]] *3
y3New = [fit[0]*2 + fit[1]] *3
fig = plt.figure(num="LIVE", figsize=(14, 6), dpi=80, facecolor='w', edgecolor='k')
plt.plot(x,y1,'*',x,y2,'*',x,y3,'*')
for line in y1New,y2New,y3New:
plt.plot(x, line, color='r')
此答案的间距与3个配合的平均间距相同,但它有助于您找到准确的线条,而不仅仅是间距,使用此代码查看差异(我调整了y3[2]以在此处显示)
运行
y=np.concatenate(y1,y2,y3)
时出现以下错误:TypeError:只能将整数标量数组转换为标量索引
我在该行中添加了一个参数,以查看它是否有效。不管怎么说,只要把它们放在一个数组中,我相信你能做到这一点。正确的代码是y=np.concatenate([y1,y2,y3])
,fit=np.polyfit(xNew,y)
也会给出一个错误:TypeError:\u polyfit\u dispatcher()缺少一个必需的位置参数:“deg”
Fixed。正如你所知道的,这是为了给ideasHi@Alistair写的,谢谢你的建议。我不太清楚您所说的调整y1、y2、y3然后使用yNew再次装配线是什么意思。你能解释一下吗?也许可以举一个有效的例子?如果我理解正确,np.polyfit(xNew,y,1)的斜率是我试图确定的结果相等间距。我不希望这个结果与简单地平均单独拟合结果之间的间距相同。
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3])
y1 = np.array([60.8, 60.5, 60.5])
y2 = np.array([377.6, 376.8, 377.7])
y3 = np.array([695.4, 695.8, 800])
xNew=[0, 0, 0, 1, 1, 1, 2, 2, 2]
y =np.concatenate([y1,y2,y3])
fit = np.polyfit(xNew,y, 1)
y1New = [fit[0]*0 + fit[1]] *3
y2New = [fit[0]*1 + fit[1]] *3
y3New = [fit[0]*2 + fit[1]] *3
fig = plt.figure(num="LIVE", figsize=(14, 6), dpi=80, facecolor='w', edgecolor='k')
plt.plot(x,y1,'*',x,y2,'*',x,y3,'*')
for line in y1New,y2New,y3New:
plt.plot(x, line, color='r')
fit_1 = np.polyfit(x,y1,0)
fit_2 = np.polyfit(x,y2,0)
fit_3 = np.polyfit(x,y3,0)
for line in fit_1,fit_2,fit_3:
plt.axhline(line, color='b')
print(float((fit_3 - fit_1)/2))
print(fit[0])