【问题标题】:Python, Extract spline coefficientPython,提取样条系数
【发布时间】:2021-06-30 11:55:34
【问题描述】:

我正在使用 python3,Scipy

我有一个 3d 点 (x,y,z] 我从他们那里使用scipy.interpolate.splprep

x_points = np.linspace(0, 2*np.pi, 10)
y_points = np.sin(x_points)
z_points = np.cos(x_points)
path = np.vstack([x_points, y_points, z_points])
tck, u = sc.splprep(path, k=3, s=0)

我希望得到样条[i]的系数: 例如最新的样条: sp9 = a9 + b9(x-x4) + c9(x-x4)^2 + d9(x-x4)^3

我知道tck 是 (t,c,k) 一个元组,其中包含节点向量、B 样条系数和样条度数。 但我不知道如何获得这个样条函数并只绘制它

【问题讨论】:

    标签: python-3.x scipy spline


    【解决方案1】:

    我试过用这个方法:

    import numpy as np
    import scipy.interpolate as sc
    
    x_points = np.linspace(0, 2*np.pi, 10)
    y_points = np.sin(x_points)
    z_points = np.cos(x_points)
    path = np.vstack([x_points, y_points, z_points])
    tck, u = sc.splprep(path, k=3, s=0)
    
    p = sc.PPoly.from_spline(tck)
    

    但我在最后一行收到此错误:

    p = sc.PPoly.from_spline(tck) 文件 "C:\Users...\Python38\lib\site-packages\scipy\interpolate\interpolate.py", 第 1314 行,在 from_spline cvals = np.empty((k + 1, len(t)-1), dtype=c.dtype) AttributeError: 'list' 对象没有属性 'dtype'

    【讨论】:

      【解决方案2】:

      tck 元组中的系数在 b 样条基础上。如果您想将它们转换为幂基础,您可以执行PPoly.from_spline(tck) 。 但是必须注意:在碱基之间进行转换会导致数值错误。

      编辑。首先,因为它是 splprep,所以您需要将数组列表 c 转换为适当的 numpy 数组并转置(这是一个已知的 splPrep 疣)。然后,事实证明,PPoly.from_spline 不处理多维c(这可能是对 scipy 存储库的一个很好的拉取请求),所以你需要例如循环维度。类似于(从您的 OP 继续)

      t, c, k = tck
      cc = np.asarray(c)    # cc.shape is (3, 10) now
      spl0 = sc.PPoly.from_spline((t, cc.T[0], k))
      print(spl0.c)   # here are your coefficients for the component 0
      

      【讨论】:

      • usign p = sc.PPoly.from_spline(tck) 我收到了这个错误:AttributeError: 'list' object has no attribute 'dtype'
      • 啊,splprep。然后需要转置c数组
      • 你能详细说明一下吗
      • 还有一些我想念的东西。 spl0.c 的维度对我来说没有意义:spl0.c.shape: (4, 13)。你能举个例子来说明如何提取第一个和第二个多项式的 x,y,z 点(总共应该有 9 个多项式,因为我在 x_points var:x_points = np.linspace(0, 2*np.pi, 10) 中使用了 10 个点)
      • 对于 PPoly 系数的含义,您最好阅读 PPoly 文档
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多