R 将矩阵分解为子矩阵

R 将矩阵分解为子矩阵,r,matrix,submatrix,R,Matrix,Submatrix,我找到了一个类似问题的解决方案,当矩阵可能不是正方形时(在我的情况下可能不是这样),它会将一个矩阵分解为一组不重叠的子矩阵。然而,在我的例子中,我希望矩阵是重叠的。以以下矩阵为例: M <- matrix(1:20, 5) # [,1] [,2] [,3] [,4] #[1,] 1 6 11 16 #[2,] 2 7 12 17 #[3,] 3 8 13 18 #[4,] 4 9 14 19 #[5,

我找到了一个类似问题的解决方案,当矩阵可能不是正方形时(在我的情况下可能不是这样),它会将一个矩阵分解为一组不重叠的子矩阵。然而,在我的例子中,我希望矩阵是重叠的。以以下矩阵为例:

M <- matrix(1:20, 5)

#     [,1] [,2] [,3] [,4]
#[1,]    1    6   11   16
#[2,]    2    7   12   17
#[3,]    3    8   13   18
#[4,]    4    9   14   19
#[5,]    5   10   15   20

M也许这样的策略可以奏效

submat <- function(m, nrow, ncol) {
    stopifnot(nrow(m)>=nrow, ncol(m)>=ncol)
    rowstarts<-1:(nrow(m)-nrow+1)
    colstarts<-1:(ncol(m)-ncol+1)
    ss <- function(r, c) {
        m[r:(r+nrow-1), c:(c+ncol-1), drop=FALSE]
    }
    with(expand.grid(r=rowstarts, c=colstarts), mapply(ss, r, c, SIMPLIFY=FALSE))
}

submat(M, 4, 4)
submat=nrow,ncol(m)>=ncol)

Rowstart精彩的回答!我需要停止忘记expand.grid。