从已知矩阵构建块对角矩阵

问题描述 投票:5回答:2

我想通过将B放在A的对角线位置,从已知矩阵(B)构建块对角矩阵(A)。

让我们说我的B:

> matrix(c(1,3,4,5),nrow=2)
      [,1] [,2]
[1,]    1    4
[2,]    3    5 

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

[1,] 1 4 . . . .
[2,] 3 5 . . . .
[3,] . . 1 4 . .
[4,] . . 3 5 . .
[5,] . . . . 1 4
[6,] . . . . 3 5

真的很感激任何帮助

r matrix diagonal
2个回答
6
投票

我们可以使用bdiag

library(Matrix)
bdiag(replicate(3, B, simplify = FALSE))
#6 x 6 sparse Matrix of class "dgCMatrix"

#[1,] 1 4 . . . .
#[2,] 3 5 . . . .
#[3,] . . 1 4 . .
#[4,] . . 3 5 . .
#[5,] . . . . 1 4
#[6,] . . . . 3 5

我们可以包裹一个功能吗?

fdiag <- function(mat, n) {
      bdiag(replicate(n, mat, simplify = FALSE))
}

fdiag(B, 3) 

5
投票

期望的矩阵是单位矩阵和B的kronecker乘积。没有使用包裹。

B <- matrix(c(1,3,4,5),nrow=2)
diag(3) %x% B

赠送:

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    4    0    0    0    0
[2,]    3    5    0    0    0    0
[3,]    0    0    1    4    0    0
[4,]    0    0    3    5    0    0
[5,]    0    0    0    0    1    4
[6,]    0    0    0    0    3    5
© www.soinside.com 2019 - 2024. All rights reserved.