Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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_Numpy_Least Squares_Data Fitting_Scipy Optimize - Fatal编程技术网

Python 如何将一组等间距平行线拟合到数据网格

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(

我想使用最小二乘最小化技术将一组等距平行线拟合到数据网格中。我能够将独立的平行线拟合到我的数据中。但是,正如预期的那样,拟合结果的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([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])