从已知矩阵构建块对角矩阵 [英] Build a block diagonal matrix from a known matrix

查看:121
本文介绍了从已知矩阵构建块对角矩阵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过将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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆