我有一个M行和N列的矩阵。我需要随机抽样这些矩阵中的不同位置并返回行索引和col索引。
我的方法:说,我想在矩阵中抽样30%的条目。然后,我遍历整个矩阵,在每个点上,我抛出一个有30%概率的偏头硬币,并选择头部来的位置。由于我的数据很大,因此大约会选择30%的条目。但是,我发现这真的很慢。有没有办法加快速度?或者更好的方法呢?
答案 0 :(得分:4)
如果m
是您的矩阵,请尝试:
arrayInd(sample(length(m),0.3*length(m)),dim(m))
一个例子:
set.seed(1)
m<-matrix(ncol=6,nrow=6)
arrayInd(sample(length(m),0.3*length(m)),dim(m))
# [,1] [,2]
# [1,] 4 2
# [2,] 2 3
# [3,] 2 4
# [4,] 6 5
# [5,] 1 2
# [6,] 4 5
# [7,] 5 5
# [8,] 4 6
# [9,] 6 3
#[10,] 2 1
答案 1 :(得分:1)
见这个例子:
m=2
n=5
SampleSize=0.3
#dummy data
x <- matrix(runif(m*n),nrow=n)
#sample
set.seed(123)
temp <- x
temp[ sample(1:length(temp),round(length(temp)*SampleSize))] <- -9
#index
ix <- temp==-9
ix
# [,1] [,2]
# [1,] FALSE FALSE
# [2,] FALSE FALSE
# [3,] TRUE TRUE
# [4,] TRUE FALSE
# [5,] FALSE FALSE
答案 2 :(得分:1)
我最喜欢的选项:
indexSampler <- function(m, p) {
matrix(sample(c(TRUE,FALSE), length(m), p = c(p, 1 - p), replace=TRUE), ncol(m))
}
您不会获得索引,但您将获得一个可用于索引的矩阵TRUE / FALSE。
速度非常快(对于200x200的矩阵来说是1000倍,对于小矩阵来说也快得多)。