首页 > 解决方案 > 从已知矩阵构建块对角矩阵

问题描述

我想通过仅保留矩阵(B)的块对角线中的元素来从已知矩阵(B)构建块对角矩阵(A)。我想用 R 来做。

例如,B 是一个 6 x 6 矩阵。

B <- matrix(rnorm(36), nrow = 6)

我正在寻找这样的函数:function(B,3)(3 只是一个随机数,它代表块的总数)它返回矩阵 A,如下所示:

[1,] B11 B12  .   .   .   .
[2,] B21 B22  .   .   .   .
[3,] .    .  B33 B34  .   .
[4,] .    .  B43 B44  .   .
[5,] .    .   .   .  B55 B56
[6,] .    .   .   .  B65 B66

非常感谢任何帮助

标签: rmatrix

解决方案


我们可以bdiag用来构造sparseMatrix1 的 a 并与“B”矩阵相乘,使得对应于 0 的值sparseMatrix变为 0,而对应于 1 的值保持不变

library(Matrix)
as.matrix(bdiag(rep(list(matrix(c(1, 1, 1, 1), 2, 2)), 3))) * B

-输出

       [,1]      [,2]       [,3]       [,4]     [,5]       [,6]
[1,] -0.8049569 -1.360807  0.0000000  0.0000000 0.000000  0.0000000
[2,] -0.2881172  1.810878  0.0000000  0.0000000 0.000000  0.0000000
[3,]  0.0000000  0.000000 -0.7705610  2.1809346 0.000000  0.0000000
[4,]  0.0000000  0.000000  0.3041445 -0.5894346 0.000000  0.0000000
[5,]  0.0000000  0.000000  0.0000000  0.0000000 2.033442  0.2190562
[6,]  0.0000000  0.000000  0.0000000  0.0000000 2.283470 -0.6036186

如果我们需要它是稀疏的,则删除as.matrix包装器

> bdiag(rep(list(matrix(c(1, 1, 1, 1), 2, 2)), 3)) * B
6 x 6 sparse Matrix of class "dgCMatrix"
                                                                   
[1,] -0.8049569 -1.360807  .          .         .         .        
[2,] -0.2881172  1.810878  .          .         .         .        
[3,]  .          .        -0.7705610  2.1809346 .         .        
[4,]  .          .         0.3041445 -0.5894346 .         .        
[5,]  .          .         .          .         2.033442  0.2190562
[6,]  .          .         .          .         2.283470 -0.6036186

推荐阅读