首页 > 解决方案 > 将矩阵列表除以矩阵

问题描述

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

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

谢谢你。

标签: rmatrixtidyverse

解决方案


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

# 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

推荐阅读