簡體   English   中英

隨機采樣矩陣的項並返回R中的(行,列)索引。

[英]Randomly Sample entries of a matrix and return the (Row, Column) Indexes in R?

我有一個M行N列的矩陣。 我需要隨機采樣這些矩陣中的不同位置,然后返回行索引和col索引。

我的方法:說,我想對矩陣中30%的條目進行抽樣。 然后,我遍歷整個矩陣,在每個點上,我拋棄一個正面概率為30%的偏向硬幣,並選擇正面出現的位置。 由於我的數據很大,因此大約選擇了30%的條目。 但是,我發現這確實很慢。 有沒有辦法加快速度? 還是更好的方法呢?

如果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

請參閱以下示例:

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

我最喜歡的新選項:

indexSampler <- function(m, p) {
    matrix(sample(c(TRUE,FALSE), length(m), p = c(p, 1 - p), replace=TRUE), ncol(m))
}

您不會獲得索引,但是會得到一個充滿了TRUE / FALSE的矩陣,可以用來建立索引。

它非常快(對於200x200的矩陣,系數為1000,對於較小的矩陣,也明顯更快)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM