Python:内存在创建大量唯一值时出错

时间:2013-09-26 05:52:18

标签: python arrays timeit

我正在学习python,我遇到了一个问题,要求评估运行时间 使用timeit的长度为10 ^ 8的随机输入集。我知道如何使用timeit,但是我在创建大小为10 ^ 8的数组时遇到了麻烦。下面,我展示了我的方法。

t = Timer(lambda: inversions_brute_force([4, 1, 3, 2, 9, 1]))
print 'time:' + str(t.timeit(number=1))

获取数组,我尝试这样做:

import random
print random.sample(range(10**8), 10**8)

但我遇到了内存错误。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你的内存错误,因为python列表包含10 ** 8个整数真的很大。

我用memory_profiler做了一点测试。范围(10 ** 8)在我的笔记本电脑上占用近3GB的内存,所以如果你的电脑内存少于3GB是正常的。

Line #    Mem usage    Increment   Line Contents
==========================================
 2                             @profile
 3    16.242 MB     0.000 MB   def foo():
 4   779.199 MB   762.957 MB       a=np.arange(10**8)
 5   779.207 MB     0.008 MB       np.random.shuffle(a)

你说:

  

我遇到了一个问题,要求使用timeit评估长度为10 ^ 8的随机输入集的运行时间。

我只是想知道你在评估什么,你的算法或Python的速度/内存使用情况?为什么长度应该是10 ^ 8?长度可以更短吗?

顺便说一下,使用numpy可以优化内存使用量。当你只想让序列随机时,random.sample也应该用random.shuffle替换,后者在速度和内存使用方面都更有效率。

Line #    Mem usage    Increment   Line Contents
================================================
 3                             @profile
 4    16.242 MB     0.000 MB   def foo():
 5   779.199 MB   762.957 MB       a=np.arange(10**8)