我有一個 20000x90 矩陣 M 的概率介于 0 和 1 之間。我想使用這些概率回傳一個 20000x90 的 1 和 0 矩陣(即對于矩陣中的每個概率 p 我想運行 rbinom(1,1,p) )。
這是我目前有效的解決方案:
apply(M,1:2,function(x) rbinom(1,1,x))
但是,它很慢,我想知道是否有更快的方法來實作相同的目標。
uj5u.com熱心網友回復:
rbinom是向量化的,因此您可以傳遞概率的向量(或矩陣);您只需要將n觀察次數從1更改為 中的值數M。
一個例子:
# with loop
set.seed(74309281)
M = matrix(runif(20000*90), nr=20000, nc=90)
a1 = apply(M,1:2,function(x) rbinom(1,1,x))
# without loop
set.seed(74309281)
M = matrix(runif(20000*90), nr=20000, nc=90)
a2 = matrix(rbinom(length(M),1,M), nr=nrow(M), nc=ncol(M))
all.equal(a1, a2)
# [1] TRUE
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/526990.html
標籤:r
上一篇:如何在R中的類別叉積中表示資料
