尝试加速潜在流动空气动力学求解器。我没有使用相对昂贵的公式计算任意点的速度,而是试图预先计算速度场,以便我可以插值,并(希望)加速代码。对于每次调用运行的scipy.interpolate.RegularGridInterpolator方法,结果都是缓慢的(我认为)。如何缓存作为此调用结果的函数?我试过的一切都会让我产生散列错误。
我有一种实现插补器的方法和第二个工厂'减少参数列表的方法,以便可以在ODE求解器中使用。
x_panels和y_panels是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的结果,其结果是一个函数。我不确定这是否是一个有效的概念。
答案 0 :(得分:0)
scipy.interpolate.RegularGridInterpolator返回一个numpy数组。这不可缓存,因为它没有实现哈希。
您可以存储numpy数组的其他表示形式并缓存该数组,然后将其转换回numpy数组。有关如何执行此操作的详细信息,请参阅以下内容。