使用Python在内存中分配大型数组

时间:2015-11-03 21:26:57

标签: python memory optimization

代码

Sub firstSheet()

Sheets(1).Select

End Sub

在我的机器上运行大约需要7分钟(6分44秒)。该计算机具有8 Gb的RAM,并使用CPython 3.4.3运行Linux。如何更快地获得具有1字节unsigned int条目的类数组对象,最好使用Python标准库? Numpy可以立即分配(不到1毫秒)。

3 个答案:

答案 0 :(得分:5)

a = array.array('B', [0]) * 3715948544

序列乘法,类似于如何创建一个巨大的零列表。请注意,您想要使用此巨型阵列执行的任何操作都可能与您最初尝试创建它的速度一样慢。

答案 1 :(得分:2)

如果您真的无法使用NumPy,您可以尝试使用内置bytearray获取的距离:

a = bytearray(3715948544)

这最多应该在几秒钟内完成。

答案 2 :(得分:1)

起初我认为numpy会是最快的,但正如Sven所指出的那样,bytearray非常快10000.试试你的运气与bytearray一起在30亿。

In [1]: import numpy as np

In [2]: import array, itertools

In [3]: %timeit array.array('B', itertools.repeat(0, 10000))
1000 loops, best of 3: 456 µs per loop

In [4]: %timeit np.zeros(10000, dtype='uint8')
1000000 loops, best of 3: 924 ns per loop

In [5]: %timeit bytearray(10000)
1000000 loops, best of 3: 328 ns per loop