在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】:

使用unlistarray

array(unlist(lis), dim = c(10,10,3,3))

【讨论】:

【参考方案2】:

你可以使用simplify2array:

simplify2array(lis)

【讨论】:

以上是关于在R中将数组列表转换为数组数组(保留子数组的形状)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Numpy 中将数组展平为矩阵?

AttributeError:“列表”对象在转换为数组时没有属性“形状”

如何在keras中将三维数组转换为五维数组[重复]

在java中将整数列表转换为整数数组[重复]

如何在 PostgreSQL 8.0.2 中将列表转换为数组

在c#中将字符串转换为字符串数组