随机抽样矩阵的条目并返回R中的(行,列)索引?

时间:2015-05-14 08:31:17

标签: r

我有一个M行和N列的矩阵。我需要随机抽样这些矩阵中的不同位置并返回行索引和col索引。

我的方法:说,我想在矩阵中抽样30%的条目。然后,我遍历整个矩阵,在每个点上,我抛出一个有30%概率的偏头硬币,并选择头部来的位置。由于我的数据很大,因此大约会选择30%的条目。但是,我发现这真的很慢。有没有办法加快速度?或者更好的方法呢?

3 个答案:

答案 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倍,对于小矩阵来说也快得多)。