在R中将数组列表转换为数组数组(保留子数组的形状)
Posted
技术标签:
【中文标题】在R中将数组列表转换为数组数组(保留子数组的形状)【英文标题】:Converting list of arrays to array of arrays (preserving shape of subarrays) in R 【发布时间】:2022-01-06 03:45:35 【问题描述】:我有一个包含 3 个数组的列表。每个数组都有 10、10、3 的暗淡。我想将此列表转换为数组,并且我想保留子数组的形状特征。换句话说,我想有一个暗淡为 3,10,10,3 的数组,而不是暗淡为 10,10,3 的 3 个数组的列表。应保留数组的顺序。
这是一个示例列表:
a1 <- array(c(1:100), dim = c(10,10,3))
a2 <- array(c(1:100), dim = c(10,10,3))
a3 <- array(c(1:100), dim = c(10,10,3))
lis <- list()
lis[[1]] <- a1
lis[[2]] <- a2
lis[[3]] <- a3
列表结构如下:
[[1]]
, , 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
, , 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
, , 3
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
[[2]]
, , 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
etc.
我尝试了以下方法:
tarray <- function(x) aperm(x, rev(seq_along(dim(x))))
ar <- tarray(array(unlist(lis), c(3, 10, 10, 3)))
暗淡看起来不错,虽然输出没有:
, , 1, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 31 61 91 21 51 81 11 41 71
[2,] 1 31 61 91 21 51 81 11 41 71
[3,] 1 31 61 91 21 51 81 11 41 71
, , 2, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 4 34 64 94 24 54 84 14 44 74
[2,] 4 34 64 94 24 54 84 14 44 74
[3,] 4 34 64 94 24 54 84 14 44 74
, , 3, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 7 37 67 97 27 57 87 17 47 77
[2,] 7 37 67 97 27 57 87 17 47 77
[3,] 7 37 67 97 27 57 87 17 47 77
, , 4, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 10 40 70 100 30 60 90 20 50 80
[2,] 10 40 70 100 30 60 90 20 50 80
[3,] 10 40 70 100 30 60 90 20 50 80
, , 5, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 13 43 73 3 33 63 93 23 53 83
[2,] 13 43 73 3 33 63 93 23 53 83
[3,] 13 43 73 3 33 63 93 23 53 83
我想要这样的数组输出:
, , 1, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
, , 2, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
, , 3, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
, , 4, 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
如何做到这一点?
【问题讨论】:
您说您希望阵列为 3x10x10x3,但您的输出显示为 10x10x?x1。我不确定预期的输出是什么。 看看How to turn list into an array in R? 【参考方案1】:使用unlist
和array
。
array(unlist(lis), dim = c(10,10,3,3))
【讨论】:
【参考方案2】:你可以使用simplify2array
:
simplify2array(lis)
【讨论】:
以上是关于在R中将数组列表转换为数组数组(保留子数组的形状)的主要内容,如果未能解决你的问题,请参考以下文章
AttributeError:“列表”对象在转换为数组时没有属性“形状”