python - 为什么 scipy 的 splrep 在输入数据上显示错误?
问题描述
在使用 scipy 的 splrep 函数为下面给定的数据点拟合三次 B 样条曲线时,输出结果是一个零数组,它表示输入数据有错误。我已经检查了文档中写的条件,因此输入看起来很合理。
knot = [70.0]
X= [65. , 67.5, 70. , 72.5]
Y= [70.9277775 , 50.40025663 , 42.45372799 , 57.39316434]
Weight= [0.13514246 , 0.33885943 , 0.87606185 , 0.31531958]
SplineOutput=intp.splrep(X, Y, task=-1, t=knot, full_output=1, w=Weight)
SplineOutput
>>>((array([65. , 65. , 65. , 65. , 70. , 72.5, 72.5, 72.5, 72.5]), array([0., 0., 0., 0., 0., 0., 0., 0., 0.]), 3), 0.0, 10, 'Error on input data')
任何有关此错误来源及其解决方法的帮助将不胜感激。提前致谢!
解决方案
从文档中,在Notes下
如果提供,节点 t 必须满足 Schoenberg-Whitney 条件,即,必须有一个数据点的子集,
x[j]
如t[j] < x[j] < t[j+k+1]
,对于j=0, 1,...,n-k-2
。
这实际上意味着 ifk
是 3,我认为这是默认值,n
必须至少为 5。在您的情况下,n
是 4,因此为什么会出现错误。要么提供一个额外的条目,x
要么减少。如果您选择后者,请记住以下几点:y
w
k
k:整数,可选
样条拟合的程度。建议使用三次样条。应避免使用偶数 k 值,尤其是在 s 值较小的情况下。1 <= k <= 5
推荐阅读
- javascript - 使用 Angular Material Select 和 Reactive Forms 访问输入
- php - 如何编码以显示 mysql 数据库中数据的每次更改
- javascript - jquery 不提交表单
- mysql - 在 MySQL 中使用 GROUP BY 求和和减法
- elasticsearch - 不同值的最早时间戳的 Elasticsearch 日期直方图
- amazon-web-services - 使用 Cloudwatch 和 lambda 启动和停止实例的成本
- python - 通过 USB 从 arduino 接收的 pyserial 丢失数据
- javascript - 如何将字符串数据编码为 UTF 编码格式
- node.js - 通用搜索:在多个集合之间搜索(Express / mongoose)
- twilio - 如何使用短信挂钩延迟对用户消息的响应?