首页 > 编程知识 正文

python非线性最小二乘拟合,python 排序

时间:2023-05-05 08:59:13 阅读:143425 作者:1793

核心代码import numpy as np

导入随机

导入匹配

effit _ line _ by _ ran sac (point _ list,sigma,iters=1000,P=0.99 ) :

使用RANSAC算法对齐直线

#迭代最大次数iters=1000

#数据和模型公差sigma

#获得正确模型的概率P=0.99

#最佳模型的参数估计

best_a=0#线性梯度

best_b=0#直线切片

n_total=0#内点数

forIinrange(ITERS ) :

#随机选取两点求解模型

sample _ index=random.sample (range (len ) point_list,2 ) ) ) ) ) ) ) ) ) ) ) ) )。

x _1=point _ list [ sample _ index [0] [0]

y _1=point _ list [ sample _ index [0] [1]

x _2=point _ list [ sample _ index [1] [0]

y _2=point _ list [ sample _ index [1] [1]

if x_2==x_1:

continue

求# y=ax b,b

a=(y_2-y_1)/(x_2 - x_1) ) ) ) ) ) a=(y_2-y_1)

b=y_1 - a * x_1

计算#内点数

total_inlier=0

forindexinrange(len(point_list ) ) :

y _ estimate=a* point _ list [ index ] [0] b

if ABS (y _ estimate-point _ list [ index ] [1] ) sigma:

total_inlier =1

#确定当前模型是否比以前估计的模型好

if total_inlier n_total:

iters=math.log(1-p )/math.log )1-pow ) total_inlier/len ) point_list ),2 ) )

n_total=total_inlier

best_a=a

best_b=b

#确定当前模型是否适合一半以上的点

iftotal_inlierlen(point_list )//2:

布莱克

return best_a,best_b

if __name__=='__main__':

#测试

points=[ (1,3 ),5,11 ),8,18 ),9,22 ),10,19 ),19,37 ] ]

a,b=fit_line_by_ransac(points,sigma=3) ) ) ) ) ) ) ) ) ) ) )。

print(line:y=%s*x%s ) % (a,b ) ) ) ) ) ) ) ) ) ) ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。