2

假设我们有以下矩阵:

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
4

2 回答 2

3

遍历v_matrixby 行 in apply,然后使用带有 'm'sweep的行值作为vectormatrix

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

-输出

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

#[[2]]
#     [,1] [,2]
#[1,]    7   32
#[2,]   14   40
#[3,]   21   48
于 2021-04-11T18:28:04.633 回答
2

另一个基本 R 选项使用Map

> 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
于 2021-04-11T20:53:43.227 回答