我需要在我的程序中处理大量数据(例如float),这会花费我很多内存。另外,我创建了一些数据结构来组织我的数据,这也会耗费内存。
以下是示例:
Heap at the end of the function Partition of a set of 6954910 objects. Total size = 534417168 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 3446006 50 248112432 46 248112432 46 array.array
1 1722999 25 124055928 23 372168360 70 vertex.Vertex
2 574705 8 82894088 16 455062448 85 list
.......
任何解决方案?
答案 0 :(得分:1)
Python支持内部维护在简单数据的压缩二进制数组中的array
个对象。
例如
import array
a = array.array('f', 0. for x in range(100000))
将创建一个包含100,000个浮点数的array
对象,其大小约为400Kb(每个元素4个字节)。
当然,您只能在数组对象中存储特定类型的值,而不是像常规list
对象那样存储任何Python值。
numpy
模块扩展了这个概念,为您提供了许多快速操作此类多维数据结构的方法(包括将数组的一部分视为共享相同内存的数组,重新整形数组,执行数学和搜索操作以及更多)。
答案 1 :(得分:0)
如果你每天需要处理数十亿行数据,到目前为止最简单的方法是创建一个简单的索引器脚本,根据某些键将数十亿行分成小文件(例如第一行)日志文件行中IP地址的两位数字)。
如果您需要处理数字理论,日志文件或其他具有大量整数或浮点数的内容:
1)学会好好使用Numpy数组
2)开始使用Numba的即时编译
3)学习Cython(你可以做比Numba更多的事情)
至少中等水平的linux技能在处理大量数据方面是一个巨大的优势。有些事情需要几秒钟直接从命令行完成,而在python中如何做同样的事情可能根本不明显。
至少使用%timeit来测试达到所需比例的比例范围(例如每天25亿行)。这是一种识别可能性能下降,并相应减小阵列大小或其他因素的简便方法。
只要您对数据执行某些操作,就可以了解有关分析/性能黑客攻击的更多信息。
指出关于' indexer' clear,一个非常简单的示例索引器我已经创建并用于使用每月60美元的服务器对包含数十亿行数据的文件进行大量计算。