Python 访问和操作数据库的最有效方法是什么

Python 访问和操作数据库的最有效方法是什么,python,pandas,Python,Pandas,我正在从事一个基于代理的建模项目,有一个800x800网格表示一个景观。此网格中的每个单元格都指定了某些变量。其中一个变量是“植被”(即该单元所具有的功能类型)。我的数据名气如下: 在我访问此数据帧之前,每个单元格都分配了一个横向类型。然后,我在800x800网格中循环每个单元格并分配更多变量,因此,例如,如果单元格1是横向类型4,我需要访问上述数据帧,为每个功能类型生成一个介于最小和最大物种百分比之间的随机数,然后分配所有变量(即花粉装载、连续时间等)但是,对于该单元格的横向类型,如果随机数

我正在从事一个基于代理的建模项目,有一个800x800网格表示一个景观。此网格中的每个单元格都指定了某些变量。其中一个变量是“植被”(即该单元所具有的功能类型)。我的数据名气如下:


在我访问此数据帧之前,每个单元格都分配了一个横向类型。然后,我在800x800网格中循环每个单元格并分配更多变量,因此,例如,如果单元格1是横向类型4,我需要访问上述数据帧,为每个功能类型生成一个介于最小和最大物种百分比之间的随机数,然后分配所有变量(即花粉装载、连续时间等)但是,对于该单元格的横向类型,如果随机数的总和,则需要将尽可能多的计算提取到矢量化预处理步骤中。例如,在800x800循环中,您有:

burn_s_m_p = round(2-(1/(1 + (math.exp(- (self.landscape.soil_moisture[x, y] * 3)))) * 2),4)
在初始化过程中,不要执行这行800x800次,只需执行一次即可:

burn_array = np.round(2-(1/(1 + (np.exp(- (self.landscape.soil_moisture * 3)))) * 2),4)
现在,在您的循环中,它只是:

burn_s_m_p = burn_array[x, y]

将此技巧应用于其他类似行。

请编辑您的帖子,展示如何调用此方法,特别是循环。谢谢。这无疑将加快这些部件的速度。然而,我真的想想出一种更快/更有效的方法,将df的子集添加到每个对象。我感谢你的建议。Thanks@TjBethells:只需一步一个脚印,将当前显而易见的问题矢量化,然后在完成后测量节省的时间,记下它,如果仍然不够快,则发布新问题。一个相关的低挂水果是
veg\u this\u patch.apply(lambda…
)-我打赌你可以在不使用
apply()
的情况下找到解决方法,这将非常有帮助。谢谢。我已经实施了您建议的更改,并看到速度有所提高。非常感谢。如果没有创建_植被的调用,我的模型现在只需几秒钟即可加载,但是,包括创建_植被的调用将导致10-15分钟的加载时间!这里的最佳实践是什么?接受此答案并创建另一个问题?谢谢。@TjBethells:是的,我认为吸取这个问题中的经验教训,接受这个答案,然后发布一个新问题,其中包含更新的代码和更新的性能数字(以及您的性能目标!)。你可以在这里发布一个指向该问题的链接。
burn_array = np.round(2-(1/(1 + (np.exp(- (self.landscape.soil_moisture * 3)))) * 2),4)
burn_s_m_p = burn_array[x, y]