Python Numpy整数高内存使用

时间:2016-02-17 19:50:38

标签: python python-2.7 numpy

我试图在Python中有效地存储2500万个整数。最好使用Numpy,这样我就可以对它们进行操作了。

我们的想法是将它们存储为4字节无符号整数。所以所需的内存应该是25M条目* 4字节= 95 MB。

我写了以下测试代码,报告的内存消耗几乎是700 MB,为什么?

a = np.array([], dtype=np.uint32)

# TEST MEMORY FOR PUTTING 25 MILLION INTEGERS IN MEMORY
for i in range(0, 25000000):
    np.append(a, np.asarray([i], dtype=np.uint32))

如果我这样做,它按预期工作:

a = np.random.random_integers(1, 25000000, size=25000000)

为什么?

1 个答案:

答案 0 :(得分:2)

实际上问题是range(0, 25000000),因为这会创建一个由int组成的列表。

包含这样一个列表所需的内存是(为简单起见,假设每个整数为32字节)25kk * 32B = 800kkB ~ 762MB

使用类似生成器的xrange或更新到python3那里range的内存成本更低(因为这些值不是预先计算的,而是在需要时进行评估)。

实际的numpy数组总是为空的(因为你只用np.append创建一个临时副本 - 后续的结果不存储,因此之后直接丢弃!)因此可以忽略不计。

我会与您的a = np.random.random_integers(1, 25000000, size=25000000)合作,然后将其转换(如果您愿意)到np.uint