从已知矩阵构建块对角矩阵 [英] Build a block diagonal matrix from a known matrix
本文介绍了从已知矩阵构建块对角矩阵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想通过将B放在A的对角位置来从已知矩阵(B)构建块对角矩阵(A).
I want to build a block diagonal matrix (A) from a known matrix (B) by putting B in diagonal positions of A.
比方说我的B:
> matrix(c(1,3,4,5),nrow=2)
[,1] [,2]
[1,] 1 4
[2,] 3 5
我正在寻找这样的函数:function(B,3)
(3只是一个随机数),它返回矩阵A,如下所示:
I am looking for a function like this: function(B,3)
(3 is just a random number) which returns matrix A like this:
[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
我们可以包装一个函数吗
Can we wrapped in a function
fdiag <- function(mat, n) {
bdiag(replicate(n, mat, simplify = FALSE))
}
fdiag(B, 3)
这篇关于从已知矩阵构建块对角矩阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文