You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:36:02