我浏览了许多标题相似的帖子,但似乎没有一个能帮助我解决此代码。
我有一个非常大的数组(1200 行,48 列,6 张)。我想把它压平成一个矩阵。
因此可以使用较小的版本:
nchanges <- 4
ncat <- 3
npatches <- 6
A <- array(c(1, -1, 0, 0, 0, 1, -1, 0, 0, 0, 1, -1),
dim=c(nchanges, ncat, npatches))
colnames(A) <- c("S", "I", "R")
出来后看起来像这样(虽然有六片)
, , 1
S I R
[1,] 1 0 0
[2,] -1 1 0
[3,] 0 -1 1
[4,] 0 0 -1
我想将它压缩成一个切片,最终得到一个与此类似的矩阵:
S1 S2 S3 S4 S5 S6 I1 I2 I3 I4 I5 I6 R1 R2 R3 R4 R5 R6
[1,] 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[2,] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[3,] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[4,] 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
[6,] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
[7,] -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
[8,] 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
[9,] 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
[10,] 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
[11,] 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0
[12,] 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0
...
nrow = npatches*nchanges
我可以弄清楚如何使用 for 循环来做到这一点,但我确信有一种在计算上更加智能和高效的方法来做到这一点。
通常我们只是给数组提供其他维度。
> (dm <- dim(A))
[1] 4 3 6
> array(A, c(dm[1]*dm[3], dm[2]*dm[3])) |> zgp::edge()
V1 V2 V17 V18
1 1 1 ... 1 1
2 -1 -1 ... -1 -1
3 0 0 ... 0 0
4 0 0 ... 0 0
5 0 0 ... 0 0
... ... ... ... ...
20 0 0 ... 0 0
21 0 0 ... 0 0
22 0 0 ... 0 0
23 1 1 ... 1 1
24 -1 -1 ... -1 -1