【问题标题】:Dividing a list of matrices by a matrix将矩阵列表除以矩阵
【发布时间】:2021-07-08 19:10:16
【问题描述】:

我有一个矩阵列表,我喜欢将每个矩阵中的值除以不同的值。

l1 <- list(1,2,3,4,5,6)
l2 <- list(7,8,9,10,11,12)

mat <- Map(
    function(x, y) outer(unlist(x), unlist(y), `+`) / 2,
    split(l1, ceiling(seq_along(l1) / 3)),
    split(l2, ceiling(seq_along(l2) / 3))
)

例如,下面的输出显示了mat 列表中的元素之一:

$`1`
     [,1] [,2] [,3]
[1,]  4.0  4.5  5.0
[2,]  4.5  5.0  5.5
[3,]  5.0  5.5  6.0

我想将矩阵中的值除以另一个具有不同值的矩阵 也许一个看起来像这样的矩阵(我不确定如何在 r 中创建一个矩阵)

2 1 2
3 2 3
1 2 3

我想要的输出将如下所示:

     [,1]    [,2]   [,3]
[1,]  4.0/2  4.5/1  5.0/2
[2,]  4.5/3  5.0/2  5.5/3
[3,]  5.0/1  5.5/2  6.0/3

我怎样才能创建这个输出?如何在R 中创建具有所需值的矩阵?

谢谢。

【问题讨论】:

    标签: r matrix tidyverse


    【解决方案1】:

    如果您的矩阵具有相同的维度,您可以使用 / 运算符来划分它们。

    # create matrix to divide by
    mat_div <- matrix(c(2,3,1,1,2,2,2,3,3), nrow = 3)
    
    # divide list of matricies
    lapply(mat, `/`, mat_div)
    
    #------
    $`1`
         [,1] [,2]     [,3]
    [1,]  2.0 4.50 2.500000
    [2,]  1.5 2.50 1.833333
    [3,]  5.0 2.75 2.000000
    
    $`2`
         [,1] [,2]     [,3]
    [1,]  3.5 7.50 4.000000
    [2,]  2.5 4.00 2.833333
    [3,]  8.0 4.25 3.000000
    

    【讨论】:

      【解决方案2】:

      我们可以使用Map

      mat <- Map(`/`, mat, list(mat2))
      

      -输出输出

      mat
      $`1`
           [,1] [,2]     [,3]
      [1,]  2.0 4.50 2.500000
      [2,]  1.5 2.50 1.833333
      [3,]  5.0 2.75 2.000000
      
      $`2`
           [,1] [,2]     [,3]
      [1,]  3.5 7.50 4.000000
      [2,]  2.5 4.00 2.833333
      [3,]  8.0 4.25 3.000000
      

      数据

      mat2 <- cbind(c(2, 3, 1), c(1, 2, 2), c(2, 3, 3))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-03
        • 2013-09-21
        • 1970-01-01
        • 2017-05-10
        • 2010-12-03
        相关资源
        最近更新 更多