我有一個M行和N列的矩陣。我需要在這些矩陣中隨機抽樣不同的位置並返回行索引和列索引。矩陣的隨機樣本條目並返回R中的(行,列)索引?
我的方法:說,我想在矩陣中抽取30個百分比的條目。然後,我遍歷整個矩陣,在每個點上,我拋出一個有30%概率頭的有偏見的硬幣,並選擇頭部到來的位置。因爲我的數據很大,所以大約選擇了30%的條目。但是,我觀察到這真的很慢。有沒有辦法加快這一點?或者更好的方法來做到這一點?
我有一個M行和N列的矩陣。我需要在這些矩陣中隨機抽樣不同的位置並返回行索引和列索引。矩陣的隨機樣本條目並返回R中的(行,列)索引?
我的方法:說,我想在矩陣中抽取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倍,對於小矩陣來說也是明顯更快)。
可能的重複如果我試圖找回指數,它不會進一步慢! – dineshdileep
您需要從矩陣中排列/ col索引或值本身? –
行,列索引。 – dineshdileep
爲什麼不是實際值?你將如何處理索引? –