如何解决在 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 举报,一经查实,本站将立刻删除。