我有一个任务是从阿尔法列表a,b,c,d的总体中随机选择100个元素,相应的频率(概率)为0.1,0.3,0.2,0.4。有很多不同的方法可以做到这点。但在这里,我希望在此函数调用后返回的(假设有一个)是所选元素的数量的列表。比方说,它返回( 20 , 20 ,30,30),那么它意味着选择了20个元素a,选择了20个元素c,依此类推。我认为np.random.multinomial是可行的。按照上面的例子,我需要调用函数np.random.multinomial(100,0.1,0.3,0.2,0.4,1 )。是这样的吗?谢谢。
相关:fast way to uniformly remove 10% of all the elements in a given list of python
发布于 2015-03-13 00:11:06
是的,np.random.multinomial(100, [0.1,0.3,0.2,0.4], 1 )是正确的。但是由于您只做一次绘制,您可能更喜欢更简单的np.random.multinomial(100, [0.1,0.3,0.2,0.4]) (不带,1),它返回一个数组而不是一个数组的数组。
发布于 2020-03-04 23:16:23
我同意JulienD的观点。“选择”这个词和给定的概率并不在一起。
当然,类别中的计数不是100*概率。从长远来看,这将是期望值。就像你抛出一枚公平的硬币,你不会期望它是HTHTHT...HT,但从长远来看,H的计数将是总抛出次数的一半。
import numpy.random as npr
npr.seed(123)
npr.multinomial(100, [0.1,0.3,0.2,0.4], 1)
# Out: array([[11, 27, 18, 44]])随着模拟次数的增加,概率将收敛到给定的概率。
simulations = 1000
sum(npr.multinomial(100, [0.1,0.3,0.2,0.4], simulations))/simulations/100
#Out:array([ 0.09995, 0.29991, 0.19804, 0.4021 ])https://stackoverflow.com/questions/29014620
复制相似问题