函数 scipy.interpolate.interpn() 太慢了

Posted

技术标签:

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

代码按预期工作,但速度太慢。对于这些调用中的每一个,参数pointpoints 都是相同的。因此,为每个调用确定的插值权重必须相同。由于权重相同,因此一遍又一遍地计算它们是低效的。

难道真的没有用 scipy 更快的方法吗?

【问题讨论】:

能否请您提供一些您正在使用的示例数据?您可能只是混合了 interpn 函数的 valuesxi 参数。在典型的用例中,前两个参数是固定的。第三个参数可以是一个 numpy 数组,它可以使您免于循环(并使评估可能更快)。 不,调用编码正确。参数pointspoint 在循环内不会改变。 您能用示例数据解释一下您要做什么吗? 在同一个网格的同一个点上,我插入了 300k 个不同的函数,每个函数都在该网格上采样 我猜你已经没有这些功能了,否则你会直接在point上调用它们?我敢打赌,为它们中的每一个创建插值器确实需要一些时间。以前,我在使用 numba 和 Cython 使事情变得更快方面有一些运气。也许这些可以为您提供帮助。 【参考方案1】:

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

【讨论】:

以上是关于函数 scipy.interpolate.interpn() 太慢了的主要内容,如果未能解决你的问题,请参考以下文章

测开之函数进阶篇・第五篇《递归函数纯函数匿名函数偏函数》

8InfluxDB常用函数聚合函数,count()函数,DISTINCT()函数,MEAN()函数,MEDIAN()函数,SPREAD()函数,SUM()函数

Kotlin函数式编程 ② ( 过滤函数 | predicate 谓词函数 | filter 过滤函数 | 合并函数 | zip 函数 | folder 函数 | 函数式编程意义 )

Kotlin函数式编程 ② ( 过滤函数 | predicate 谓词函数 | filter 过滤函数 | 合并函数 | zip 函数 | folder 函数 | 函数式编程意义 )

1.19.9.函数概览函数引用精确函数引用模糊函数引用函数解析顺序精确函数引用模糊函数引用自定义函数准备工作概述开发指南函数类求值方法标量函数表值函数聚合函数

Kotlin函数式编程 ① ( 函数式编程简介 | 高阶函数 | 函数类别 | Transform 变换函数 | 过滤函数 | 合并函数 | map 变换函数 | flatMap 变换函数 )