Python:创建大数组的唯一值时出现内存错误

2024-09-28 16:19:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

为了得到阵列,我试着这样做:

^{pr2}$

但是我遇到了一个记忆错误。有什么想法吗?在


Tags: 方法记忆lambdanumbertime时间数组print
1条回答
网友
1楼 · 发布于 2024-09-28 16:19:15

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

我用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)

你说:

I came across a problem that asks to evaluate running times on sets of random inputs of length 10^8 using timeit.

我只是想知道你在评估什么,你的算法或者Python的速度/内存使用情况?为什么长度应该是10^8?长度能再小一点吗?在

另外,使用numpy可以优化内存使用。随机抽样也应替换为随机洗牌当您只希望序列是随机的时,后者在速度和内存使用方面都要高效得多。在

^{pr2}$

相关问题 更多 >