我有一个n × n矩阵,其中的值在[0,1]之间,每一列都有相同的值。
这些值表示矩阵的每个元素取TRUE或FALSE值的概率。
我正在寻找一种快速的方法来转换矩阵的概率与一个矩阵的TRUE/TRUE值的基础上,为每个元素的独立随机样本。
目前,这段代码生成了我想要的(tf_matrix):
n <- 10
p_true <- runif(n,0,1)
p_matrix <- matrix(p_true,n,n, byrow=T)
tf_matrix <- matrix(F, n,n)
for(i in 1:nrow(tf_matrix)) {
for(j in 1:ncol(tf_matrix)) {
tf_matrix[i,j] <- sample(c(T,F), size = 1, prob = c(p_matrix[i,j], 1-p_matrix[i,j]))
}
}
然而,这可能非常慢,因为它使用了两个for循环,我需要对一个大矩阵反复执行。
有没有一种方法可以使它更有效(即尽可能快)?
1条答案
按热度按时间bis0qfac1#
sample(c(T, F), size = 1, prob = x)
等于runif(1) < x
。但是对于runif
和<
,我们可以简单地扩展,因为<
是矢量化的: