【问题标题】:Function scipy.interpolate.interpn() much too slow函数 scipy.interpolate.interpn() 太慢了
【发布时间】: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


【解决方案1】:

interpolatedValue = [ scipy.interpolate.interpn(points, value, point)[0] for valueList ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2013-03-10
    • 2014-06-07
    • 2016-05-31
    • 2011-07-07
    • 2015-08-23
    相关资源
    最近更新 更多