2017-04-14 30 views
3

假設有1000人,他們都被問到他們最喜歡的餐是早餐,午餐還是晚餐。我存儲在一個列表類似的信息:如何從細分人羣構建隨機樣本?

mylist = [350, 450, 200] 

即350人喜歡的早餐,450像午餐,200就像吃飯。

我如何隨機抽樣100人並獲得類似名單?這就是我想要得到隨機抽樣名單像

[35, 45, 20] 
[33, 42, 25] 
[37, 46, 17] 

謝謝..

編輯:我想補充一點。期望的行爲是取樣而不更換。假設按照上面的例子,我想從原始1000中抽取999個人。不應該有可能得到一個列表,例如[350, 458, 201],因爲沒有201人喜歡吃晚餐。

回答

4

這將做的工作:

import numpy as np 
res=np.random.choice(350*[0]+450*[1]+200*[2],size=100,replace=False) 
np.histogram(res,range(4))[0] 

更普遍:

import numpy as np 
v=[350,450,200] 
res=np.random.choice(np.repeat(range(len(v)),v),size=100,replace=False) 
np.histogram(res,range(len(v)+1))[0] 
2

的一種方式做到這一點無需更換,無需更換1和1000(代表個人)之間繪製的隨機整數然後確定他們落入哪個桶(早餐,午餐或晚餐組):

import numpy 

vec = [350, 450, 200] 

# pick people without replacement 
samp = numpy.random.choice(1000, 100, replace=False) 

# get their preference 
prefs = numpy.digitize(samp, numpy.cumsum(vec)) 

# count people by preference 
numpy.histogram(prefs, 3)[0] 
+0

我喜歡這樣, 謝謝。 –