- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在将用 R 编写的脚本移植到 Python。在 R 中,我使用 smooth.spline,在 Python 中,我使用 SciPy UnivariateSpline。它们不会产生相同的结果(即使它们都基于三次样条方法)。有没有办法或 UnivariateSpline 的替代方案,使 Python 样条线返回与 R 相同的样条线?
我是一名数学家。我了解样条线的一般概念。但不是它们在 Python 或 R 中实现的细节。
这里是 R 代码,然后是 Python 代码。两者的输入数据相同。
这是输入数据:
x = 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
y = -1, 1, 1, -1, 1, 0, .5, .5, .4, .5, -1
这是 R 代码
x = seq(0,1, by = .1);
y = c(-1,1,1, -1,1,0, .5,.5,.4, .5, -1);
spline_xy = smooth.spline(x,y)
predict(spline_xy,x)
输出:
$x
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
$y
[1] 0.120614583 0.170800975 0.210954680 0.238032338 0.253672155
[6] 0.253684815 0.236432643 0.200264536 0.145403302 0.074993797
[11] -0.004853825
这是Python代码
import numpy as np
from scipy.interpolate import UnivariateSpline
x = np.linspace(0, 1, num = 11, endpoint=True)
y = np.array([-1,1,1, -1,1,0, .5,.5,.4, .5, -1])
spline_xy = UnivariateSpline(x,y)
print('x =', x)
print('ysplined =',spline_xy(x))
输出:
x = [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
ysplined =
[-0.26433566 -0.02587413 0.18857809 0.36585082 0.49277389
0.55617716 0.54289044 0.43974359 0.23356643 -0.08881119
-0.54055944]
我希望 R $y 中的输出和 Python ysplined 中的输出是相同的。但他们不是。
任何帮助,例如如何设置参数或解释,将不胜感激!预先感谢您。
最佳答案
在我看来,这些是不同的平滑方法。
R中的smooth.spline
是一个“平滑样条线”,它是一个过参数化的自然样条线(每个数据点都有结,内部有三次样条线,线性外推法),使用惩罚最小二乘法选择参数。您可以阅读帮助页面,了解如何计算惩罚的详细信息。
另一方面,Python 的 UnivariateSpline
出现在此处的文档中: https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.UnivariateSpline.html作为回归样条,通过最小二乘法拟合,没有惩罚。它似乎可以自适应地选择结的数量。
这些是完全不同的算法,我不希望它们给出相同的结果。我不知道是否有一个 R 包使用与 Python 相同的自适应结选择。这个答案:https://stackoverflow.com/a/55481248/2554330声称引用了 Python 中的自然平滑样条实现,但我不知道它是否与 R 的实现匹配。
关于Python SciPy UnivariateSpline 与 R smooth.spline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56667657/
我正在研究一个简单的函数来拟合 yield 曲线。我正在使用 Scipy.interpolate.UnivariateSpline 来完成任务。该函数应返回特定时间间隔(到期日)的 yield 值。
我有一堆代表 sigmoidal 函数的 x, y 点: x=[ 1.00094909 1.08787635 1.17481363 1.2617564 1.34867881 1.43562
我正在使用 UnivariateSpline 为我拥有的一些数据构造分段多项式。然后我想在其他程序(C 或 FORTRAN 中)中使用这些样条,因此我想了解生成的样条背后的方程式。 这是我的代码: i
我正在尝试将一些 MatLab 代码移植到 Scipy,并且我尝试了 scipy.interpolate 中的两个不同函数,interp1d和 UnivariateSpline . interp1d
我尝试使用 SciPy 的平滑单变量样条 from scipy.interpolate import UnivariateSpline spl = UnivariateSpline(x, y) 我收到
我在尝试使用 UnivariateSpline 函数插入数据时遇到了一个奇怪的问题。通过所有点进行插值 (s=0) 和样条函数不会给出整个数据集的结果。 s>=1 的结果也很奇怪。因为我认为它与我正在
scipy UnivariateSpline 不允许多值 X。我读到这已更改,但似乎对我不起作用。我用的是最新版本,刚刚用pip尝试下载,说我有最新版本。 我曾尝试将 s(平滑)从 0 和 None(
我正在尝试使用 UnivariateSpline 函数为某些数据(原始布拉格峰)生成拟合。这是我的代码: import matplotlib.pyplot as plt from scipy impo
我正在尝试使用 SciPy 的 UnivariateSpline 来定位曲线上的一个点。不幸的是,我的结果是 nan。 这是一个最小的例子: from scipy.interpolate import
我无法让 scipy.interpolate.UnivariateSpline 在插值时使用任何平滑。基于function's page以及一些previous posts ,我相信它应该使用 s 参
我正在将用 R 编写的脚本移植到 Python。在 R 中,我使用 smooth.spline,在 Python 中,我使用 SciPy UnivariateSpline。它们不会产生相同的结果(即使
我有一个实验数据,我正在尝试使用 scipy 中的 UnivariateSpline 函数拟合曲线。数据如下: x y 13 2.404070 12 1.588134 1
当 spline = UnivariateSpline(x, y, bbox=[0,1], k=3.0,s=0.0) 对比 spline = UnivariateSpline(x, y, k=3.0,
scipy.interpolate.splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None, full_output=0,
我正在使用 scipy.interpolate.UnivariateSpline平滑地插入大量数据。效果很好。我得到一个像函数一样运行的对象。 现在我想保存样条点以备后用,并在不需要原始数据的情况下在
我是一名优秀的程序员,十分优秀!