gpt4 book ai didi

python - scipy.interpolate.UnivariateSpline 中的 bbox agrument 是做什么的?

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:17 25 4
gpt4 key购买 nike

spline = UnivariateSpline(x, y, bbox=[0,1], k=3.0,s=0.0)

对比

spline = UnivariateSpline(x, y, k=3.0,s=0.0)

,后者产生的结果明显低于第一个。所以我想知道 bbox 参数实际上是做什么的? An example of my x vector would be [0.0518429, 0.102736, 0.153367, 0.254166, 0.354551, 0.404618, 0.454606, 0.479576, 0.504523, 0.529457, 0.554374, 0.604159, 0.653876, 0.753149, 0.85219, 0.901613, 0.970617]所以 x 包含在 (0,1) 内

最佳答案

TL;DR:您正在整合两个不同的样条曲线。

bbox 参数本身的作用与 jar 上所说的完全一样,https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.UnivariateSpline.html


bbox : (2,) array_like, 可选
指定近似区间边界的 2 序列。如果没有
(默认),bbox=[x[0], x[-1]]。

措辞有点含糊,我同意。一个简单的例子有助于:

In [1]: from scipy.interpolate import UnivariateSpline

In [2]: import numpy as np

In [4]: x = np.array([0.2, 0.4, 0.6, 0.8])

In [5]: y = x**4

In [6]: s1 = UnivariateSpline(x, y, s=0)

In [7]: s1.get_coeffs()
Out[7]: array([ 0.0016, 0.0176, 0.0096, 0.4096])

In [8]: s1.get_knots()
Out[8]: array([ 0.2, 0.8])

现在,指定 bbox 更改样条:

In [15]: s2 = UnivariateSpline(x, y, s=0, bbox=[0, 1])

In [16]: s2.get_knots()
Out[16]: array([ 0., 1.])

因此,如果您在不依赖外推的情况下将每个样条整合到它们的基区间内,一切似乎都很好:

In [23]: s2.integral(0, 1)
Out[23]: 0.19493333333333332

In [24]: s1.integral(0.2, 0.8)
Out[24]: 0.06576000000000003

In [25]: (0.8**5 - 0.2**5) / 5
Out[25]: 0.06547200000000002

但是,一旦您尝试在更大的区间内对 s1 进行积分,它就会崩溃:

In [26]: s1.integral(0.2, 0.8) - s1.integral(0, 1)
Out[26]: 0.0

注意它不应该这样做:默认是外推,所以它应该是非零的。这实际上可能是一个错误。

关于python - scipy.interpolate.UnivariateSpline 中的 bbox agrument 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45904929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com