我想從離散分佈中繪製。Python中的bisect.bisect()對應於R?
我有一個矩陣pi,它由概率向量(具有相同數量的列,並且每行的總和爲1)組成。
在Python,我可以做以下
cumsumpi = cumsum(pi, axis = 1)
[bisect.bisect(k, random.rand()) for k in cumsumpi]
獲得由PI給出的概率繪製的向量。
現在我想用R重現這一點。我知道R中有「sample」函數,但它似乎使用了一些不同的算法,然後平分,因此我得到不同的繪圖,即使我使用相同的set.seed( )在這兩種情況下。
我用rpy2得到在Python完全相同的隨機繪製如R.例如,
代替random.rand()中,我使用 [bisect.bisect(K,asarray(robjects.r ('runif(1)')))for k in cumsumpi]
請讓我知道是否有其他功能比樣品在R做同樣的事情。
-Joon
編輯: 我設法再現與下面完全相同的平局,但它是緩慢的。
cumsumpi = t(apply(pi, 1, cumsum))
getfirstindx = function(cumprobs) {
return(which(cumprobs > runif(1))[1])
}
apply(cumsumpi, 1, getfirstindx)
我可能是錯的,但我不認爲這就是我要找的。我想要的是獲得runif(1)所在的向量的索引(由累積概率組成,例如[0.1,0.3,0.7,1])。例如,如果runif(1)draw爲0.5,則平分爲3,這是0.7的指數。 (0.3
joon
2010-11-06 07:00:13