从另一个没有循环的矩阵的随机块行创建矩阵(在R中)?

阿德里安

我正在尝试通过从另一个矩阵绘制随机块行来创建一个矩阵。我设法做到了循环。

set.seed(1)
a_matrix  <- matrix(1:10,10,5) # the matrix with original sample 

b_matrix <- matrix(NA,10, 5) # a matrix to store the bootstrap sample 

S2<- seq(from =1 , to = 10, by =2) #[1] 1 3 5 7 9

m <- 2 # block size of m 

for (r in S2){  start_point<-sample(1:(nrow(a_matrix)-1), 1, replace=T) 
                #randomly choose a number 1 to length of a_matrix -1  
                b_block <- a_matrix[start_point:(start_point+(m-1)), 1:ncol(a_matrix)] 
                # randomly select blocks  from matrix a 
                b_matrix[r,]<-as.matrix((b_block)[1,]) 
                b_matrix[(r+1),]<-as.matrix((b_block)[2,]) # put the blocks into matrix b 
} 
b_matrix
#we now have a b_matrix that is made of random blocks (size m=2)
#of the original a_matrix  

循环方法有效,但显然效率不高,无法将其扩展到其他块大小(例如,块大小为3)。什么是更干净,更可扩展的方法?提前致谢

在这里,我尝试将其清理干净并概括化使用m

random_block_sample <- function(a_matrix, m = 2L) {
   N <- nrow(a_matrix)
   stopifnot(m <= N)
   n <- ceiling(N / m)
   s <- sample(N - m + 1L, n, TRUE) # start_point
   i <- unlist(lapply(s, seq, length.out = m))
   b_matrix <- a_matrix[i, , drop = FALSE]
   head(b_matrix, N)
}

set.seed(1L)
random_block_sample(a_matrix, m = 2L)
#       [,1] [,2] [,3] [,4] [,5]
#  [1,]    3    3    3    3    3
#  [2,]    4    4    4    4    4
#  [3,]    4    4    4    4    4
#  [4,]    5    5    5    5    5
#  [5,]    6    6    6    6    6
#  [6,]    7    7    7    7    7
#  [7,]    9    9    9    9    9
#  [8,]   10   10   10   10   10
#  [9,]    2    2    2    2    2
# [10,]    3    3    3    3    3

set.seed(1L)
random_block_sample(a_matrix, m = 5L)
#       [,1] [,2] [,3] [,4] [,5]
#  [1,]    2    2    2    2    2
#  [2,]    3    3    3    3    3
#  [3,]    4    4    4    4    4
#  [4,]    5    5    5    5    5
#  [5,]    6    6    6    6    6
#  [6,]    3    3    3    3    3
#  [7,]    4    4    4    4    4
#  [8,]    5    5    5    5    5
#  [9,]    6    6    6    6    6
# [10,]    7    7    7    7    7

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

比较矩阵中的列表与R中的另一个矩阵

矩阵除以另一个矩阵的行,theano中没有循环

创建大小与另一个相同的随机numpy矩阵。

通过累加另一个矩阵的行在R中创建新矩阵

numpy:从另一个矩阵的所有元素中减去矩阵而没有循环

R:将矩阵与r中的另一个矩阵映射

在“ R”中创建一个矩阵,该矩阵中的每个元素都是另一个矩阵

创建没有一个数字的随机矩阵

R-识别并删除在另一个矩阵中重复的矩阵行

如何在R中将一个矩阵的每一行与另一个矩阵相乘?

用R中的另一个矩阵替换一个矩阵

用R中的另一个矩阵创建一个矩阵

根据R中另一个矩阵的行和列对矩阵进行排序

检查矩阵中的所有值是否大于另一个矩阵中的匹配行

如何使用r中的另一个矩阵通过for循环更改矩阵的值?

根据另一个矩阵删除矩阵行?

用另一个矩阵对矩阵中的行元素进行排序

通过numpy中的索引数组从另一个矩阵填充空矩阵的行

如何从矩阵中删除与另一个向量中的值匹配的所有行?

根据 r 中的另一个矩阵对矩阵进行排序

如何根据R中另一个矩阵的值生成矩阵

R - 用来自另一个矩阵的特定数据块的数据填充矩阵

查找 Matlab 中矩阵的行是否“落在”另一个矩阵的行内

如何从矩阵中每一行的矢量化和与另一个矩阵获得矩阵

如何将矩阵的行随机复制到内存中的另一个矩阵的过程并行化?

R:根据另一个矩阵中的值和坐标为新矩阵赋值

有没有一种快速的方法可以从python中的另一个矩阵创建一个布尔矩阵?

R从另一个矩阵中的信息创建一个二进制矩阵

如何循环另一个循环以填充矩阵