如何将矩阵与多个向量相乘以获得矩阵列表?

时间:2021-04-11 18:22:23

标签: r

假设我们有以下矩阵:

m=matrix(1:6,ncol=2)

     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

使用 sweep 我们可以将矩阵 m 与某个向量 v 相乘:

v=c(3,4)

sweep(m , MARGIN=2, v , `*`)

# Output :
         [,1] [,2]
    [1,]    3   16
    [2,]    6   20
    [3,]    9   24

我正在寻找使用多个向量来执行此操作。例如:

v_matrix=matrix(data=c(3,4,7,8),ncol=2,byrow=TRUE)

v_matrix

     [,1] [,2]
[1,]    3    4
[2,]    7    8

预期的输出是:

[[1]]
     [,1] [,2]
[1,]    3   16
[2,]    6   20
[3,]    9   24
[[2]]
     [,1] [,2]
[1,]    7   32
[2,]   14   40
[3,]   21   48

2 个答案:

答案 0 :(得分:3)

v_matrix中逐行循环遍历apply,然后在行值上使用sweep,它是一个vector,'m'为{{1} }

matrix

-输出

do.call("c", apply(v_matrix, 1, function(x) list(sweep(m, MARGIN = 2, x, `*`))))

答案 1 :(得分:2)

使用 Map 的另一个基本 R 选项

> Map(function(x, y) t(x * y), list(t(m)), data.frame(t(v_matrix)))
[[1]]
     [,1] [,2]
[1,]    3   16
[2,]    6   20
[3,]    9   24

[[2]]
     [,1] [,2]
[1,]    7   32
[2,]   14   40
[3,]   21   48