有人能帮我优化我对矩阵每一行的随机值进行采样的方法吗?
到目前为止,我有两种方法:
volume <- matrix(rnorm(10000), 100, 100)
microbenchmark(
test <- apply(volume, 1, function(x) {sample(x, 1)}),
# make matrix into a vector, sample one time for all rows at the same time,
# and then add 0, 100, 200 ... to each sample
test2 <- c(t(volume))[sample(x=1:ncol(volume), size=nrow(volume), replace=T) + seq(from=0, by=ncol(volume), length.out=nrow(volume))]
)
3条答案
按热度按时间5jvtdoz21#
您可以使用2列矩阵为矩阵编制索引,以便第一列是行的选择器,第二列是列的选择器。
例如:
应用相同的原理,我们可以创建一个索引矩阵,其中第一列为每行(1:100),第二列为从1到100的随机整数,以选择随机列。
它看起来快了一点,可能是因为R中的矢量化,但我还没有足够的力量告诉。我希望这对你有帮助或给你其他的想法!
yvgpqqbh2#
另一种方法:
测试用例
使用更小的矩阵和易于理解的数字
我们可以很容易地逐行交叉检查,我们有一个来自随机列的值。
我使用了
rbenchmark here
fwzugrvs3#
您可以尝试将
sample.int
与cbind
结合使用,如下所示