Python使用numpy、scipy进行曲线拟合时得到闭合曲线如何处理
问题原因
你调用splprep时设置了per=1,该参数代表生成周期性样条曲线,会自动匹配首尾点的导数、将曲线首尾连接形成闭合效果。
解决方案
仅需要将splprep的per参数修改为0即可得到非闭合的拟合曲线,修改后的完整代码如下:
import numpy as np from scipy.interpolate import splprep, splev import matplotlib.pyplot as plt coords = np.array([(3,8),(3,9),(4,10),(5,11),(6,11), (7,13), (9,13),(10,14),(11,14),(12,14),(14,16),(16,17),(17,18),(18,18),(19,18), (20,19), (21,19),(22,20),(23,20),(24,21),(26,21),(27,21),(28,21),(30,21),(32,20),(33,20),(32,17),(33,16),(33,15),(34,12), (34,10),(33,10), (33,9),(33,8),(33,6),(34,6),(34,5)]) # 仅修改per参数为0即可 tck, u = splprep(coords.T, u=None, s=0.0, per=0) u_new = np.linspace(u.min(), u.max(), 1000) x_new, y_new = splev(u_new, tck, der=0) plt.plot(coords[:,1], coords[:,0], 'ro') plt.plot(y_new, x_new, 'b--') plt.show()
补充说明
如果你不需要拟合曲线完全经过所有输入点,可以适当调大s参数(平滑系数),得到更平滑的非闭合曲线。
内容的提问来源于stack exchange,提问作者KV KRISHNASHAI
相关产品推荐
相关产品推荐

