假设我有一个方阵 (45 x 45
),我想将其分成 5 个子矩阵,这些子矩阵基于对角线 block 9 x 9
矩阵。我正在寻找一种通用方法来完成此任务,而无需指定列和行。
示例
mat <- matrix(rnorm(45), 45, 45)
mat1 <- mat[1:9, 1:9]
mat2 <- mat[10:18, 10:18]
mat3 <- mat[19:27, 19:27]
mat4 <- mat[28:36, 28:36]
mat5 <- mat[37:45, 37:45]
最佳答案
取所示两个矩阵的克罗内克积,得到 block 对角矩阵 m
,其第一个 block 全为 1,第二个 block 全为 2,依此类推。然后除以该矩阵,删除对应的分量非对角线并将分割的每个分量重新形成矩阵。结果s
是 block 的列表。
# test inputs
set.seed(123)
n <- 45
k <- 9
mat <- matrix(round(rnorm(n*n), 2), n, n)
m <- diag(1:(n/k)) %x% matrix(1, k, k)
s <- lapply(split(mat, m)[-1], matrix, k)
关于r - 通过对角 block 分割方阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49458692/