哪种数据类型用于缓存(字典或数据帧)更快?

时间:2019-04-07 05:20:07

标签: python

我正在编写一个名为“变量”的程序。每个变量将执行一些计算,并将结果存储在其自己的“缓存”中。当前,“缓存”是一个字典,例如,

{(1,2):results_for_parameter_(1,2),
(3,4):results_for_parameter_(3,4)...etc}

此缓存的唯一用途是读取和写入“缓存”的结果。缓存的读取和写入将非常频繁地执行。这本词典的大小将很大。它(缓存)可能有超过一百万个项目(我尚未确定模型的复杂性)。我正在考虑是否将该缓存的数据类型更改为pandas.dataframe。

我想问的是在这种情况下哪种数据类型更有效。更具体地说,哪种数据类型应该更快:

  1. 在每个计算循环的开始,缓存中的每个值都将被删除。缓存的基本结构将保留。
  2. 该模型包含数百个“变量”,每个模型都将执行一个计算,该计算可能会从其他“变量”中获取值(在这种情况下,将读取其他变量的缓存)
  3. 每个“变量”将在一个循环中使用数百万个参数组合(例如(1,2),(3,4))计算数百万次(实际数量将在以后确定,最终可能只有10000个)。 )...等等
  4. 所有计算之后,缓存将被存储,然后我们回到步骤1进行另一个循环
  5. 大约有1000个计算循环

也欢迎使用一种数据类型而不是另一种数据类型的其他考虑。 谢谢您的回答! 编辑:您还可以推荐比我建议的更有效的缓存方式

1 个答案:

答案 0 :(得分:0)

希望这能回答您的问题。但是,由于我使用“更快”这个词,所以它可能不是您想要的。我事先表示歉意。尽管如此,我会尽力而为。

简短答案: DataFrame。

长答案:字典和DataFrame适用于很多事情;相同或不同。我无法确切证明一个比另一个要快。但是,我相信我可以证明DataFrame是:

  1. 更易于使用
  2. 具有更好的功能
  3. 自己快速,并且只需几次调整和正确的功能即可真正快速

例如,要使与DataFrame相关的所有内容变得更快,您可以尝试加载Cython扩展名并使用一些语法更改。您可以在熊猫文档https://pandas.pydata.org/pandas-docs/stable/user_guide/enhancingperf.html中阅读有关此内容的信息。

它还可以帮助确保您使用正确的功能来获得所需的内容。这样的示例包括ilocloccontainslookupisin

最后,如果您想查看一些更快的数据,则需要使用prun一些功能,或在某些循环中使用timeit。如果您的结果表明字典更快,我会购买该答案。但是,我也将持怀疑态度,因为使用正确的DataFrame方法,它可能真正很快。