【发布时间】:2022-01-11 17:37:45
【问题描述】:
我正在使用scipy.interpolate.interpn() 在二维网格上的单个点插入一个值。
问题在于,对于这个单点和 2D 网格,我必须对 interpn 函数进行多次评估:
interpolatedValue = []
for i in range(300000):
interpolatedValue.append(scipy.interpolate.interpn(points, valueList[i], point)[0])
代码按预期工作,但速度太慢。对于这些调用中的每一个,参数point 和points 都是相同的。因此,为每个调用确定的插值权重必须相同。由于权重相同,因此一遍又一遍地计算它们是低效的。
难道真的没有用 scipy 更快的方法吗?
【问题讨论】:
-
能否请您提供一些您正在使用的示例数据?您可能只是混合了
interpn函数的values和xi参数。在典型的用例中,前两个参数是固定的。第三个参数可以是一个 numpy 数组,它可以使您免于循环(并使评估可能更快)。 -
不,调用编码正确。参数
points和point在循环内不会改变。 -
您能用示例数据解释一下您要做什么吗?
-
在同一个网格的同一个点上,我插入了 300k 个不同的函数,每个函数都在该网格上采样
-
我猜你已经没有这些功能了,否则你会直接在
point上调用它们?我敢打赌,为它们中的每一个创建插值器确实需要一些时间。以前,我在使用 numba 和 Cython 使事情变得更快方面有一些运气。也许这些可以为您提供帮助。
标签: python optimization scipy interpolation