从已知矩阵构建分块对角矩阵
Build a block diagonal matrix from a known matrix
我想通过将 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 只是一个随机数)其中 returns 矩阵 A 是这样的:
[1,] 1 4 . . . .
[2,] 3 5 . . . .
[3,] . . 1 4 . .
[4,] . . 3 5 . .
[5,] . . . . 1 4
[6,] . . . . 3 5
非常感谢任何帮助
我们可以使用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)
所需矩阵是单位矩阵与 B
的克罗内克积。没有使用包。
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
我想通过将 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 只是一个随机数)其中 returns 矩阵 A 是这样的:
[1,] 1 4 . . . .
[2,] 3 5 . . . .
[3,] . . 1 4 . .
[4,] . . 3 5 . .
[5,] . . . . 1 4
[6,] . . . . 3 5
非常感谢任何帮助
我们可以使用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)
所需矩阵是单位矩阵与 B
的克罗内克积。没有使用包。
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