我想在 R 中创建一个矩阵,其中元素 [-1,0,1] 的概率分别为 [1/6, 2/3, 1/6]。概率可能会在运行时发生变化。对于静态概率,我得到了输出,但问题是概率的动态变化。例如,如果我使用 [sqrt(3),0,-sqrt(3)] 为上述概率创建一个矩阵,则所需的输出是。
注意:概率不应如上所述是静态的。它在运行时可能会有所不同。
请帮助解决这个问题。
我想在 R 中创建一个矩阵,其中元素 [-1,0,1] 的概率分别为 [1/6, 2/3, 1/6]。概率可能会在运行时发生变化。对于静态概率,我得到了输出,但问题是概率的动态变化。例如,如果我使用 [sqrt(3),0,-sqrt(3)] 为上述概率创建一个矩阵,则所需的输出是。
注意:概率不应如上所述是静态的。它在运行时可能会有所不同。
请帮助解决这个问题。
假设您想要一个 2x3 矩阵:
matrix(sample(c(-1,0,1), size=6, replace=TRUE, prob=c(1/6,2/3,1/6)), nrow=2)
所以你从你想要的值中取样,概率在prob
. 这只是一个向量,但您可以使用matrix
之后将其制成所需形状的矩阵。将概率替换为变量而不是值,以使其不是静态的。
如果数字应该根据某种方案分布而不是根据概率随机抽取,则复制向量元素并将它们打乱:
matrix(sample(rep(c(-1,0,1), times=c(1,4,1))), nrow=2)
你可以试试这个来生成一个 mxn 矩阵:
sample.dynamic.matrix <- function(pop.symbols, probs, m, n) {
samples <- sample(pop.symbols, m*n, prob = probs, replace=TRUE)
return(matrix(samples, nrow=m))
}
set.seed(123)
sample.dynamic.matrix(-1:1, c(1/6,2/3,1/6), 2, 3)
# [,1] [,2] [,3]
#[1,] 0 0 -1
#[2,] 1 -1 0