r - 从已知矩阵构建块对角矩阵
问题描述
我想通过仅保留矩阵(B)的块对角线中的元素来从已知矩阵(B)构建块对角矩阵(A)。我想用 R 来做。
例如,B 是一个 6 x 6 矩阵。
B <- matrix(rnorm(36), nrow = 6)
我正在寻找这样的函数:function(B,3)
(3 只是一个随机数,它代表块的总数)它返回矩阵 A,如下所示:
[1,] B11 B12 . . . .
[2,] B21 B22 . . . .
[3,] . . B33 B34 . .
[4,] . . B43 B44 . .
[5,] . . . . B55 B56
[6,] . . . . B65 B66
非常感谢任何帮助
解决方案
我们可以bdiag
用来构造sparseMatrix
1 的 a 并与“B”矩阵相乘,使得对应于 0 的值sparseMatrix
变为 0,而对应于 1 的值保持不变
library(Matrix)
as.matrix(bdiag(rep(list(matrix(c(1, 1, 1, 1), 2, 2)), 3))) * B
-输出
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] -0.8049569 -1.360807 0.0000000 0.0000000 0.000000 0.0000000
[2,] -0.2881172 1.810878 0.0000000 0.0000000 0.000000 0.0000000
[3,] 0.0000000 0.000000 -0.7705610 2.1809346 0.000000 0.0000000
[4,] 0.0000000 0.000000 0.3041445 -0.5894346 0.000000 0.0000000
[5,] 0.0000000 0.000000 0.0000000 0.0000000 2.033442 0.2190562
[6,] 0.0000000 0.000000 0.0000000 0.0000000 2.283470 -0.6036186
如果我们需要它是稀疏的,则删除as.matrix
包装器
> bdiag(rep(list(matrix(c(1, 1, 1, 1), 2, 2)), 3)) * B
6 x 6 sparse Matrix of class "dgCMatrix"
[1,] -0.8049569 -1.360807 . . . .
[2,] -0.2881172 1.810878 . . . .
[3,] . . -0.7705610 2.1809346 . .
[4,] . . 0.3041445 -0.5894346 . .
[5,] . . . . 2.033442 0.2190562
[6,] . . . . 2.283470 -0.6036186
推荐阅读
- php - Docker:如何在 PHP 中正确启用对 imagemagick 的 .webp 支持?
- javascript - 将缓冲区对象转换为图像
- ajax - 模型 [App\\User] {id} 没有查询结果
- javascript - 是否可以同时在多个字符串上使用包含和替换方法?
- json - 如何在swift 4中解析Json字典
- scala - 具有 SASL_SSL 身份验证的 Kafka Spark 结构化流
- python-3.x - 无法访问数据框的列
- java - 在重载构造函数后总是执行一些代码
- c++ - 在增强精神中用不同的字符串替换点燃
- php - 将带有排序、搜索和分页功能的引导表添加到我的 PHP 函数中