gpt4 book ai didi

r - 将堆叠矩阵转换为分块矩阵

转载 作者:行者123 更新时间:2023-12-01 22:37:58 25 4
gpt4 key购买 nike

我当前的数据是一系列相互堆叠的 3x3 矩阵。结构如下所示(以下示例是 3 矩阵,尽管我的实际数据更大/更长):

0   1   1
0 0 1
1 1 0
0 1 1
1 0 1
1 0 0
0 1 1
0 0 1
1 1 0

使用R,我希望它看起来像这样:

0   1   1                       
0 0 1
1 1 0
0 1 1
1 0 1
1 0 0
0 1 1
0 0 1
1 1 0

最佳答案

我们通过使用 gl 创建的分组索引将矩阵拆分为矩阵列表,并应用bdiag(来自Matrix)获取 block 对角稀疏矩阵

library(Matrix)
m2 <- bdiag(lapply(split(d1, as.integer(gl(nrow(d1), 3, nrow(d1)))), as.matrix))
m2
#9 x 9 sparse Matrix of class "dgCMatrix"
#
# [1,] . 1 1 . . . . . .
# [2,] . . 1 . . . . . .
# [3,] 1 1 . . . . . . .
# [4,] . . . . 1 1 . . .
# [5,] . . . 1 . 1 . . .
# [6,] . . . 1 . . . . .
# [7,] . . . . . . . 1 1
# [8,] . . . . . . . . 1
# [9,] . . . . . . 1 1 .

可以通过使用 as.matrix 包装将其转换为常规矩阵

as.matrix(m2)

数据

m1 <- structure(c(0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 
1, 1, 1, 0, 1, 1, 0, 1, 1, 0), .Dim = c(9L, 3L))
d1 <- as.data.frame(m1)

关于r - 将堆叠矩阵转换为分块矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50480947/

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