1

我正在尝试从多项式中进行采样,以便通过它们的权重提取向量的元素。

例如,给定向量 v <- c(10, 30, 60) 我想要类似: [ 3, 3, 2, 3, 1, 2, 3, 2, 3, 3 ]

这是迄今为止我能想到的最好的:

v <- c(10, 30, 60)
apply(rmultinom(10,1,v),2,function(x) which(x==1))

这适用于小的 N 和 K,但我实际上需要从 1 到 100k 的索引集中生成 100k 个样本,因为这种方法需要一个 NxK 临时矩阵,它显然是行不通的。我也可以使用 for 循环,但我希望有现有的方法可以做到这一点。

4

1 回答 1

2

您可以只使用sampleprob 参数

sample(length(v), 10, replace = T, prob = v)

一些示例输出:

v <- c(10, 30, 60)
out <- sample(length(v), 100, replace = T, prob = v)
out
#  [1] 3 3 3 3 3 3 3 2 2 2 2 3 3 1 3 3 3 3 2 2 3 2 1 3 3 2 3 3 3 2 2 3 2 3 1 2 2 3 3
# [40] 3 2 2 2 2 3 2 1 3 3 3 3 3 3 3 3 1 2 2 3 3 3 2 3 3 3 1 3 3 3 2 1 3 3 3 2 2 3 3
# [79] 3 3 1 3 2 3 3 3 3 2 3 3 2 2 3 2 3 2 2 2 2 3
table(out)
#out
# 1  2  3 
# 8 33 59 
于 2012-09-12T17:41:34.033 回答