微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Python 中有效地评估整个 BSpline 基础

如何解决在 Python 中有效地评估整个 BSpline 基础

我在 NumPy 数组 knots 中有一个三次样条的节点序列,我想有效地评估整个三次 BSpline 基,该基由某个点 {{1} 处的节点数组表示}}。我目前正在做的是使用 SciPy x 类构建基础:

scipy.interpolate.BSpline

然后使用返回的基础进行评估:

from scipy.interpolate import BSpline

def bspline_basis(knots):
    return [
        BSpline.basis_element(knots[i:(i+5)],extrapolate=False)
        for i in range(len(knots) - 4)
    ]

但是,由于def eval_basis(basis,x): return [elem(val).item() for elem in basis] 函数被重复调用了数百万次,所以上面的代码很慢! eval_basis 对象针对数组操作进行了优化,我用单独的标量 BSpline 提供它并从结果数组中提取标量。

由于我在现有代码库中操作,我无法将调用协议更改为 x,因此必须在单个标量 eval_basis调用它。

如果我能以某种方式有效地评估点 x 处的整个 BSpline 基并获得基函数值的 NumPy 数组,则代码显然可以加速。有没有使用 SciPy 或其他 Python 库的方法

解决方法

scipy.interpolate._bspl.evaluate_all_bspl 未记录但已完成

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。