gpt4 book ai didi

在 block 矩阵的对角部分重复 block 矩阵多次,非对角 block 全部为零矩阵?

转载 作者:行者123 更新时间:2023-12-03 14:08:12 28 4
gpt4 key购买 nike

我想创建一个 block 对角矩阵,其中对角 block 重复一定次数,非对角 block 都是零矩阵。例如,假设我们从一个矩阵开始:

> 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

我希望这个矩阵是对角 block 矩阵,所以最后我有类似的东西:

       [,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

在这里,我们在 block 对角线上重复了两次相同的 block 矩阵。如果我想有效地做到这一点任意次数,有没有办法做到这一点?谢谢!

最佳答案

1) kronecker 如果 M 是您的矩阵并且 k 是您希望它重复的次数,那么:

kronecker(diag(k), M)

例如,

M <- matrix(0.5, 5, 5) + diag(0.5, 5)
k <- 2
kronecker(diag(k), M)

给予:

      [,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

1a) %x% 最后一行代码也可以写成:

diag(k) %x% M

2) Matrix::bdiag 如果您想节省空间,另一种可能性是创建一个 "dgMCatrix" 类的稀疏矩阵。它不存储零值。见 ?bdiag :

library(Matrix)

bdiag(replicate(k, M, simplify = FALSE))

给予:

10 x 10 sparse Matrix of class "dgCMatrix"

[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 . . . . .
[6,] . . . . . 1.0 0.5 0.5 0.5 0.5
[7,] . . . . . 0.5 1.0 0.5 0.5 0.5
[8,] . . . . . 0.5 0.5 1.0 0.5 0.5
[9,] . . . . . 0.5 0.5 0.5 1.0 0.5
[10,] . . . . . 0.5 0.5 0.5 0.5 1.0

2b) 对角线 或创建类 "dgTMatrix" 的稀疏矩阵:

Diagonal(k) %x% M

关于在 block 矩阵的对角部分重复 block 矩阵多次,非对角 block 全部为零矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45092432/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com