Python 如何解决mtrand.RandomState.choice中的内存错误?

Python 如何解决mtrand.RandomState.choice中的内存错误?,python,Python,我试图从1e5字符串中采样1e7项,但出现内存错误。可以从1e4字符串中对1e6项进行精细采样。我在一台64位的机器上,内存为4GB,我不认为我应该在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. >&g

我试图从1e5字符串中采样1e7项,但出现内存错误。可以从1e4字符串中对1e6项进行精细采样。我在一台64位的机器上,内存为4GB,我不认为我应该在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=int(1e6)
>>>np.随机选择([“id%010d”%x代表范围内的x(N//K)],N)
数组(['id0000005473'、'id0000005694'、'id0000004115'、…、'id0000006958',
'id0000009972','id0000003009'],

dtype='您可以使用生成器函数解决此问题:

def item():
    for i in xrange(N):
      yield "id%010d"%np.random.choice(N//K,1)

这避免了同时需要内存中的所有项。

您允许重新采样,因此我可以在所需的间隔内看到一个使用随机数的工作循环。@doctorlove Thx。我已经尝试了
['a','b','c'][np.random.choice(2,1)]
这对一个有效。但是
['a','b','c'][np random.choice(2,5)]
给出了一个TypeError。我如何通过随机数选择字符串?我也尝试了
.tolist()
,但仍然是TypeError.things=['a','b','c'];[things[x]代表np.random.choice(2,5)]谢谢。我一直在尝试这个方法。我能把生成器传递给
pandas.DataFrame()吗
?我正在测试它,但不确定它是否工作。我的意思是,该列上的
groupby
也返回一个生成器。如果有意义的话,它感觉像熊猫只进行了一次分组,而不是进入生成器内部。因此我想知道在将生成器传递给熊猫之前是否需要评估生成器?这似乎取决于熊猫的哪个版本:或者再次感谢,很有意思。是的,我使用的是Ubuntu stable版本。现在已从NeuroDebian安装,并使用最新的pandas:v0.14.1。重新测试…将生成器传递到pandas v0.14.1会给出
TypeError:类型为“generator”的对象没有len()
。没关系。我没想到会这样。需要一种方法让生成器生成吗?
def item():
    for i in xrange(N):
      yield "id%010d"%np.random.choice(N//K,1)