首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python有效地评估整个BSpline基础

用Python有效地评估整个BSpline基础
EN

Stack Overflow用户
提问于 2021-06-01 06:53:07
回答 1查看 125关注 0票数 2

我在NumPy数组knots中有一个三次样条的节点序列,我想有效地计算一个完整的三次BSpline基,它是由某个点的节点数组表示的。我目前所做的是使用SciPy scipy.interpolate.BSpline类构建基础:

代码语言:javascript
复制
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)
    ]

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

代码语言:javascript
复制
def eval_basis(basis, x):
    return [elem(val).item() for elem in basis]

但是,由于eval_basis函数被反复调用了数百万次,所以上面的代码很慢!对BSpline对象进行了优化,以便对数组进行操作,我将向它提供单个标量x,并从结果数组中提取标量。

由于我在现有的代码库中操作,不能将呼叫协议更改为eval_basis,所以必须在单个标量x上调用它。

如果我能够以某种方式在BSpline点上有效地计算整个x基,并获得基函数值的NumPy数组,那么代码显然可以被加速。有这样一种使用SciPy的方法吗?还是使用另一个Python库?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-01 20:27:59

scipy.interpolate._bspl.evaluate_all_bspl是无文档的,但可以完成

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67783983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档