- 绘制指定直线L1(如斜率与截距分别为2与5)上10个点P=(x,y)。
- 根据直线L1上的点P=(x,y)产生噪声点Pn=(x,y_npt)。
- 从点集Pn=(x,y_npt)中随机抽取两点(变量inx保存两点的序号)。
- 根据随机抽取的两点(变量inx保存两点序号)绘制直线L2;在同一图中绘制噪声点Pn、直线L1与直线L2.
- 求取噪声点Pn=(x,y_npt)到直线L2的平均距离与方差。
import matplotlib.pyplot as plt import numpy as np #直线L1 k,b = 2,5 x = np.linspace(0,50,100) y = k * x + b #直线L1上的10个点 px = np.random.uniform(0,50,10) py = k * px + b #产生噪声点 mu,sigma = 1,2 rand_data = np.random.normal(mu,sigma,10) y_npt = py + rand_data #随机抽取两点的序号 inx = np.random.randint(0,10,2) #直线L2 if inx[0] != inx[1]: k2 = (y_npt[inx[1]]-y_npt[inx[0]])/(px[inx[1]]-px[inx[0]]) b2 = y_npt[inx[1]] - k2 * px[inx[1]] y2 = k2 * x + b2 else: print('Too few points') #求平均距离和方差 distance = np.abs((k2*px-y_npt+b2)/(np.sqrt(k2*k2+1))) ave_distance = np.mean(distance) var_distance = np.var(distance) print(ave_distance) print(var_distance) #画图 plt.figure(figsize=(6,6)) plt.plot(x,y,color='b',linestyle='-',label='L1') plt.plot(px,py,color='r',linestyle='None',marker='o',label='True points') plt.plot(px,y_npt,color='g',linestyle='None',marker='o',label='Noisy Points') plt.plot(x,y2,color='r',linestyle='-',label='L2') plt.xlabel('X') plt.ylabel('Y') plt.title('Linear Regression') plt.legend(loc='upper left') plt.grid(True) plt.show()