我正在学习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)
但我遇到了内存错误。有什么想法吗?
答案 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)