r - 通过对角 block 分割方阵

标签 r matrix

假设我有一个方阵 (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/

相关文章:

python - 在没有numpy的情况下更改对角线方阵 - Python

r - dev.new() 启动到第二台显示器

r - 将 S4 对象转换为数据帧的一般方法 (R)

r - 将十六进制字符向量转换为 R 中的原始向量

matlab - 在 MATLAB 中获取矩阵列最大值的索引

java - 骨骼动画: bind pose

r - R 中的自举相关

删除 data.frame 中具有全部或部分 NA(缺失值)的行

对象构造中的 C++ 错误。未解析的外部符号

math - 你如何在 Nimrod 中使用矩阵?