2015-05-14 80 views
0

我有一个M行和N列的矩阵。我需要在这些矩阵中随机抽样不同的位置并返回行索引和列索引。矩阵的随机样本条目并返回R中的(行,列)索引?

我的方法:说,我想在矩阵中抽取30个百分比的条目。然后,我遍历整个矩阵,在每个点上,我抛出一个有30%概率头的有偏见的硬币,并选择头部到来的位置。因为我的数据很大,所以大约选择了30%的条目。但是,我观察到这真的很慢。有没有办法加快这一点?或者更好的方法来做到这一点?

+0

您需要从矩阵中排列/ col索引或值本身? –

+0

行,列索引。 – dineshdileep

+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

见这个例子:

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 
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倍,对于小矩阵来说也是明显更快)。

+0

可能的重复如果我试图找回指数,它不会进一步慢! – dineshdileep