如何缓存scipy插值返回的函数

2024-06-28 11:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

试图加速一个潜在的气流动力学解算器。我没有用一个相对昂贵的公式计算任意点的速度,而是试着预先计算一个速度场,这样我就可以插值这些值,并且(希望)加快代码的速度。结果是(我认为)由于scipy.interpolate.RegularGridInterpolator方法在每次调用时运行。如何缓存此调用的结果函数?我尝试的每件事都会让我产生散列错误。在

我有一个实现内插器的方法和第二个“工厂”方法来减少参数列表,以便可以在ODE解算器中使用。在

x_面板和y_面板是1D数组/元组,vels是2D数组/元组,x和y是浮点。在

def _vol_vel_factory(x_panels, y_panels, vels):
# Function factory method
def _vol_vel(x, y, t=0):
    return _volume_velocity(x, y, x_panels, y_panels, vels)
return _vol_vel

def _volume_velocity(x, y, x_panels, y_panels, vels):
velfunc = sp_int.RegularGridInterpolator(
        (x_panels, y_panels), vels
        )
return velfunc(np.array([x, y])).reshape(2)

通过传递元组而不是数组作为输入,我可以更进一步,但是将方法输出转换为元组并没有产生任何影响;我仍然得到了哈希错误。在

在任何情况下,缓存_volume_velocity方法的结果并不是我真正想要做的,我真的想以某种方式缓存_vol_vel_factory的结果,它的结果是一个函数。我不确定这是否是一个有效的概念。在


Tags: 方法returnfactorydef数组速度算器元组
1条回答
网友
1楼 · 发布于 2024-06-28 11:28:32

在scipy.interpolate.RegularGridInterpolator返回numpy数组。这是不可缓存的,因为它不实现哈希。在

您可以存储numpy数组的其他表示形式并将其缓存,然后将其转换回numpy数组。有关如何做到这一点的详细信息,请看以下内容。在

How to hash a large object (dataset) in Python?

相关问题 更多 >