我想创建一个块对角矩阵,对角线块重复一定次数,非对角线块都是零矩阵 . 例如,假设我们从具有以下内容的矩阵开始:
> diag.matrix
[,1] [,2] [,3] [,4] [,5]
[1,] 1.0 0.5 0.5 0.5 0.5
[2,] 0.5 1.0 0.5 0.5 0.5
[3,] 0.5 0.5 1.0 0.5 0.5
[4,] 0.5 0.5 0.5 1.0 0.5
[5,] 0.5 0.5 0.5 0.5 1.0
我希望这个矩阵是对角块矩阵,所以最后我有类似的东西:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1.0 0.5 0.5 0.5 0.5 0.0 0.0 0.0 0.0 0.0
[2,] 0.5 1.0 0.5 0.5 0.5 0.0 0.0 0.0 0.0 0.0
[3,] 0.5 0.5 1.0 0.5 0.5 0.0 0.0 0.0 0.0 0.0
[4,] 0.5 0.5 0.5 1.0 0.5 0.0 0.0 0.0 0.0 0.0
[5,] 0.5 0.5 0.5 0.5 1.0 0.0 0.0 0.0 0.0 0.0
[6,] 0.0 0.0 0.0 0.0 0.0 1.0 0.5 0.5 0.5 0.5
[7,] 0.0 0.0 0.0 0.0 0.0 0.5 1.0 0.5 0.5 0.5
[8,] 0.0 0.0 0.0 0.0 0.0 0.5 0.5 1.0 0.5 0.5
[9,] 0.0 0.0 0.0 0.0 0.0 0.5 0.5 0.5 1.0 0.5
[10,] 0.0 0.0 0.0 0.0 0.0 0.5 0.5 0.5 0.5 1.0
在这里,我们在块对角线上重复两次相同的块矩阵 . 如果我想有效地执行任意次数,有没有办法做到这一点?谢谢!
1 回答
1) kronecker 如果
M
是您的矩阵,k
是您希望它重复的次数,那么:例如,
赠送:
1a) %x% 最后一行代码可以写成:
2) Matrix::bdiag 如果要节省空间,另一种可能性是创建类
"dgMCatrix"
的稀疏矩阵 . 它不存储零值 . 见?bdiag
:赠送:
2b) Diagonal 或创建类
"dgTMatrix"
的稀疏矩阵: