r - 将矩阵拆分为子矩阵

标签 r matrix submatrix

我找到了一个类似问题的解决方案,当矩阵可能不是正方形(因为在我的情况下可能不是)时,将矩阵分解为一组非重叠的子矩阵 Function to split a matrix into sub-matrices in R .但是,就我而言,我希望矩阵重叠。以下面的矩阵为例:

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

如果我选择子矩阵的行数和列数分别为 4 和 4,那么返回的子矩阵应该是完全适合原始矩阵边界的所有可能重叠的 4X4 子矩阵(这是这个问题的答案可能需要与我提到的问题不同的另一个地方)。在我的示例中,应该只返回两个子矩阵。 M[1:4,1:4]M[2:5,1:4]。我应该能够选择任意大小的子矩阵。我似乎找不到任何提取重叠子矩阵的例子,但我可能想多了。有人对解决此问题的最佳方法有任何想法吗?

最佳答案

也许这样的策略可行

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)

我们确定行和列的可能起始索引在哪里,然后我们使用 expand.grid() 生成这些起始值的所有可能组合,然后我们使用 mapply 使用这些起始位置提取每个可能的子矩阵。

关于r - 将矩阵拆分为子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28015539/

相关文章:

正则表达式在选择中包含 Lookahead 字符串

r - 如何在环境中使用名称?

c++ - 给定 3D 旋转矩阵和 3D 方向 vector 求角度差

python - 高效计算和存储相似度矩阵

python - 提取子矩阵时出现问题

r - 在 R 中,使用 `unique()` 和额外条件来提取子矩阵 : easy solution without plyr

r - 在 mlr 中调整整数向量

r - 根据 hist 中的值绘制条件颜色

java - 是否有一个函数可以对两个缓冲图像的光栅求和?

c - 在一维数组中查找子矩阵 - C