如何解决mtrand.RandomState.choice中的内存错误?
问题内容:
我正在尝试从1e5字符串中采样1e7项,但遇到内存错误。从1e4字符串中很好地采样1e6项。我在具有4GB
RAM的64位计算机上,不认为我应该在1e7达到任何内存限制。有任何想法吗?
$ python3
Python 3.3.3 (default, Nov 27 2013, 17:12:35)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> K = 100
与1e6兼容:
>>> N = int(1e6)
>>> np.random.choice(["id%010d"%x for x in range(N//K)], N)
array(['id0000005473', 'id0000005694', 'id0000004115', ..., 'id0000006958',
'id0000009972', 'id0000003009'],
dtype='<U12')
N = 1e7错误:
>>> N = int(1e7)
>>> np.random.choice(["id%010d"%x for x in range(N//K)], N)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "mtrand.pyx", line 1092, in mtrand.RandomState.choice (numpy/random/mtrand/mtrand.c:8229)
MemoryError
>>>
我找到了这个问题,但这似乎是在捕获这样的错误而不是解决它。
我对仍在使用的解决方案random.choice
或使用其他方法来做到这一点感到满意。谢谢。
问题答案:
您可以使用生成器函数解决此问题:
def item():
for i in xrange(N):
yield "id%010d"%np.random.choice(N//K,1)
这样避免了一次需要存储在存储器中的所有项目。