将大数组压平为矩阵

问题描述 投票:0回答:1

我浏览了许多标题相似的帖子,但似乎没有一个能帮助我解决此代码。

我有一个非常大的数组(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 循环来做到这一点,但我确信有一种在计算上更加智能和高效的方法来做到这一点。

r arrays sorting matrix
1个回答
0
投票

通常我们只是给数组提供其他维度。

> (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
© www.soinside.com 2019 - 2024. All rights reserved.