0

我正在学习 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)

但我遇到了内存错误。有任何想法吗?

4

1 回答 1

0

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

我用memory_profiler做了一个小测试。range(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)
于 2013-09-26T08:14:14.697 回答