在Python中,从给定概率的大列表中选择术语的数量

在Python中,从给定概率的大列表中选择术语的数量,python,numpy,Python,Numpy,我需要从Python中较大的列表中选择一些术语,每个术语都有特定的概率。以下代码在术语数量约为10K时起作用 import numpy as np selected_terms = np.random.choice(terms, num_select, replace=False, probability) 我需要从超过2000万的术语列表中进行选择(随着时间的推移,可能会增加到3000万)。 我得到:内存错误 我有一台64GB内存的机器。当我将术语列表截断到甚至100K时,它失败了。 我不

我需要从Python中较大的列表中选择一些术语,每个术语都有特定的概率。以下代码在术语数量约为10K时起作用

import numpy as np

selected_terms = np.random.choice(terms, num_select, replace=False, probability)
我需要从超过2000万的术语列表中进行选择(随着时间的推移,可能会增加到3000万)。 我得到:内存错误 我有一台64GB内存的机器。当我将术语列表截断到甚至100K时,它失败了。 我不知道np.random.choice在引擎盖下到底做了什么来产生结果,所以我甚至不知道它在内存中会有多大

要向您提供有关数据的一些背景信息,请执行以下操作: 术语:字符串列表[s0、s1、s2,…] num_select:我想选择的术语数量(目前大约400个,但可能会略有增加) 概率:每项元素出现的概率[p0,p1,p2,…]每一个p都是一个浮点数,它们被归一化为和1

我从元组列表开始[[术语,计数],…] 每个术语都有关联的出现次数。我将它们分割成平行列表,并通过:count/sum\u all\u counts生成每个概率

有没有其他方法可以获取我需要的选定的_术语?
还是我做错了什么?

使用64位python内存受处理器类型限制,32位python每个进程限制为2gigs。。。然后让事情变得更复杂。。。numpy需要连续数组。。。因此,您不能太适应2G使用64位python内存受处理器类型限制,32位python每个进程限制为2gigs。。。然后让事情变得更复杂。。。numpy需要连续数组。。。因此,您无法在2G中容纳太多内容尝试用列字符串概率构建数据框df。然后将pandas中的函数用作

pd.df['string'].sample(n,weights='probabilities')
其中n是要绘制的字符串数


我希望它能有所帮助。

尝试用列字符串和概率构建一个数据框df。然后将pandas中的函数用作

pd.df['string'].sample(n,weights='probabilities')
其中n是要绘制的字符串数


我希望它能帮上忙。

我用蟒蛇3和熊猫一起玩。快

只是从上面整理一下巴加瓦的答案:

selected_terms = df['string'].sample(n,weights=df['probabilities'])
我还注意到pandas.sample将为您标准化概率。因此,我改为:

selected_terms = df['string'].sample(n,weights=df['count'])
df:

是否有人知道pandas.sample如何标准化权重:

它只是做了类似于[count1/sum_counts,count2/sum_counts,…]的事情吗? 或者它是否做了Softmax之类的事情


还是其他?

我用蟒蛇3和熊猫一起玩。快

只是从上面整理一下巴加瓦的答案:

selected_terms = df['string'].sample(n,weights=df['probabilities'])
我还注意到pandas.sample将为您标准化概率。因此,我改为:

selected_terms = df['string'].sample(n,weights=df['count'])
df:

是否有人知道pandas.sample如何标准化权重:

它只是做了类似于[count1/sum_counts,count2/sum_counts,…]的事情吗? 或者它是否做了Softmax之类的事情


或者其他?

在这种情况下num\u select是什么?在这种情况下num\u select是什么?回答得很好。。。但是我怀疑他仍然使用32位python会有同样的问题。你知道pandas.DataFrame.sample会使权重正常化吗?嘿,如果传递的权重总和不等于1,它就会正常化。但在你的例子中,你已经计算出了概率,这些概率最终会归结为一,你可以通过它们,它们不会被进一步标准化。很好的答案。。。但是我怀疑他仍然使用32位python会有同样的问题。你知道pandas.DataFrame.sample会使权重正常化吗?嘿,如果传递的权重总和不等于1,它就会正常化。但在你们的例子中,你们已经计算出了概率,这些概率最终会归结为一,你们可以通过它们,它们不会被进一步标准化。