【问题标题】:How create a multiway matrix in R如何在 R 中创建多路矩阵
【发布时间】:2015-09-19 23:19:36
【问题描述】:

我需要进行一千次试验,每次试验生成一个 12 行 7 列的矩阵。如何创建一个多路矩阵来保持这个结果。 谢谢

【问题讨论】:

  • 你需要更清楚你想要什么。你想要一个矩阵列表吗?还是一个三维数组?请给出一些示例数据。
  • 我需要保存一个矩阵列表,矩阵应该具有相同的特征和名称,因为它是循环中的函数的结果。

标签: r matrix multidimensional-array


【解决方案1】:

据推测,方便的方法是将矩阵合并到列表中:

A <- matrix(1, ncol=7, nrow=12)
B <- matrix(2, ncol=7, nrow=12)
C <- matrix(3, ncol=7, nrow=12)
mats_list <- list(A, B, C)

这会给你一个对象,每个矩阵都有一个单独的维度,然后是每个矩阵中的行/列。我想说这足以满足您的需求,但如果您愿意,可以使用array

# List to matrix
mat_mat <- array(data = mats_list)
dim(mat_mat)

为了得到:

> dim(mat_mat)
[1] 3

作为

> dim(mats_list)
NULL

这就是说,列表绝对可以存储和提取结果。

【讨论】:

    【解决方案2】:

    你可以使用数组:

    set.seed(2)
    x = array(rnorm(1000*12*7), c(1000,12,7))
    
    > dim(x[1,,])
    #[1] 12  7
    
    > x[1,,]
    #             [,1]       [,2]       [,3]        [,4]         [,5]        [,6]        [,7]
    # [1,] -0.89691455  1.4948667  0.4972043  0.19952489 -0.979683918 -0.71217954  0.21510070
    # [2,]  0.46620043 -0.7645256 -0.7172315  1.69938645 -1.344280437  0.20653442 -0.91194045
    # [3,] -1.89234891 -0.1624283  1.1351026 -1.03220736  0.515821229 -0.10112438 -0.85460968
    # [4,] -2.13847638 -0.8206868  0.4083286  0.01454552  1.373745316 -0.02894237 -0.39673381
    # [5,]  0.64084454 -1.0644555 -1.2606268 -1.69156964 -0.788296665  1.13059108  0.03310462
    # [6,] -1.73081229  0.5706814 -1.2607599  0.16596195  0.001174951  0.55506678 -1.36083280
    # [7,] -1.00846517 -0.8213516  1.7968959  1.23328148 -0.682850261  1.14101830  0.84107576
    # [8,]  1.02356724 -0.9281833  0.3441365 -0.01183211 -0.649788421  0.08010038 -0.50363132
    # [9,] -0.02165721  0.6806610  0.9703106  1.22171432 -1.446446015  1.34022520 -1.41818567
    #[10,]  0.77058313  0.5023534  1.1598751 -1.20300804 -0.367739799 -0.95578416 -0.14794308
    #[11,]  1.34046771 -1.5331327  0.9604876 -0.40545479 -1.066988497 -0.14925083 -1.01576090
    #[12,] -0.60441747  0.1111074  1.8406487  0.19648890  0.503018762  1.01263304  0.42761716
    

    【讨论】:

      【解决方案3】:

      假设您有一个名为 trial 的函数,它生成一个 12x7 矩阵。

      例如

      trial <- function() {
        matrix(rnorm(84), nrow = 12)
      }
      

      使用基础 R,您可以这样做:

      trial_array <- replicate(1000, trial())
      

      这将生成一个 3 维数组或

      trial_list <- replicate(1000, trial(), simplify = FALSE)
      

      等效的 plyr 函数是 raplyrlply

      【讨论】:

        猜你喜欢
        • 2020-12-31
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 2012-11-25
        • 2015-07-12
        • 2012-05-27
        • 2020-01-29
        • 2018-09-20
        相关资源
        最近更新 更多