2015-05-14 55 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