试图加速一个潜在的气流动力学解算器。我没有用一个相对昂贵的公式计算任意点的速度,而是试着预先计算一个速度场,这样我就可以插值这些值,并且(希望)加快代码的速度。结果是(我认为)由于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的结果,它的结果是一个函数。我不确定这是否是一个有效的概念。在
在scipy.interpolate.RegularGridInterpolator返回numpy数组。这是不可缓存的,因为它不实现哈希。在
您可以存储numpy数组的其他表示形式并将其缓存,然后将其转换回numpy数组。有关如何做到这一点的详细信息,请看以下内容。在
How to hash a large object (dataset) in Python?
相关问题 更多 >
编程相关推荐