我有一个科学应用程序,可以从磁盘中读取潜在的巨大数据文件,并将其转换为各种Python数据结构,例如地图图,列表列表等.NumPy被称为进行数值分析.问题是,内存使用量可能会快速增长.调用交换空间时,系统将大大降低速度.我看到的一般策略是:

延迟初始化:从某种意义上说,这似乎无济于事,无论如何许多操作都需要对内存数据进行操作.
搁置:此Python标准库似乎支持将数据对象写入数据文件(由某些db支持).我的理解是,它会将数据转储到文件中,但是如果需要,您仍然必须将所有数据都加载到内存中,因此它并不能完全起作用.如果这是一个误会,请纠正我.
第三种选择是利用数据库,并向其分流尽可能多的数据处理

例如,一个科学实验运行了几天,并产生了巨大的(兆字节数据)序列:

co-ordinate(x,y) observed event E at time t.

并且我们需要为每个(x,y)计算t上的直方图,并输出一个3维数组.

还有其他建议吗?我想我的理想情况是可以根据软内存限制将内存中的数据结构逐步分配到磁盘,并且此过程应尽可能透明.这些缓存框架可以提供帮助吗?


编辑:

我感谢所有建议的要点和方向.其中,我发现user488551的评论最相关.尽管我喜欢Map / Reduce,但对于许多科学应用程序而言,代码并行化的设置和工作比我最初的问题恕我直言要解决的问题更大.因为我的问题本身是如此开放,所以很难选择一个答案.但是,比尔的答案更接近我们在现实世界中可以做的事情,因此可以选择.谢谢你们.

解决方法:

好吧,如果您需要整个数据集都在RAM中,则无需做很多事情,但可以获得更多RAM.听起来您不确定是否确实需要,但是保留所有数据不变需要最少的思考:)

如果您的数据长时间处于流中,并且您所做的只是创建直方图,则无需保留所有数据.只需在创建过程中创建直方图,然后将原始数据写到文件中(如果您想以后再使用),并在遇到直方图计数器后立即让Python垃圾收集数据.您只需保留直方图本身即可,该直方图应该相对较小.

标签: python

相关文章推荐

添加新评论,含*的栏目为必填