[英]R: How to randomly sample from each row of matrix into new column but only switch columns with rng
[英]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.