【发布时间】:2014-08-20 07:32:07
【问题描述】:
我的情况是这样的:
我有大约 7000 万个整数值分布在各种文件中,用于大约 10 类数据(确切数字未知)
我读取了这几个文件,并使用这些数据创建了一些 python 对象。这显然包括逐行读取每个文件并附加到 python 对象。所以我将有一个包含 70 百万个子数组的数组,每个子数组有 10 个值。
我对该数据进行了一些统计处理。这将涉及将几个值(例如,百分位等级)附加到每个“行”数据。
我将此对象存储在数据库中
现在我从未使用过这种规模的数据。我的第一直觉是使用 Numpy 来获得更有效的数组 w.r.t 内存。但后来我听说在 Numpy 数组中,不鼓励使用 'append',因为它效率不高。
那么你会建议我选择什么?处理这种大小的数据的任何一般提示?如果需要,我可以通过随机抽样将数据减少到其大小的 20%。
编辑:为了清楚地了解数据的大小和类型而进行了编辑。
【问题讨论】:
-
“大约 70 百万” - 70 什么? 7000 万字节的数据? 7000 万个数据点? 70 的缩写为“mil”的东西?你能把这一点扩大一点吗?
-
看看pandas
-
@Korem 如何使用 pandas 解决内存存储问题? Pandas 使用 numpy,pandas 结构会有额外的开销,因此会增加内存使用量。这里的想法是尽可能创建一次你的结构,一次增长它们是低效的。您的问题有点宽泛,但这可能会有所帮助:stackoverflow.com/questions/14262433/…
-
是的,我不关心内存中的实际大小,因为不可能绕过它。我主要关心的是大型 numpy 数组上的“追加”操作。
-
您是否考虑过预先分配一个 numpy 数组然后分配值?
my_array = numpy.zeros(length); for i, line in enumerate(file): ... my_array[i] = ...