如何将矩阵乘以已知向量以返回数组

时间:2021-03-30 18:08:18

标签: r

下午好!

假设我们有一个向量和一个矩阵:

v = c(2,3,4)
[1] 2 3 4

m=matrix(1:9,ncol=3)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

我正在寻找一种有效的方法(或内置函数)来获得三个矩阵 m1 , m2 , m3 使得:

m1=v[1]*m
m2=v[2]*m
m3=v[3]*m

我们可以使用 3d-array 获得它:

my_fct<-function(m,v){

f=array(data=rep(NA,nrow(m)*ncol(m)*length(v)),dim = c(nrow(m),ncol(m),length(v)))

for (j in c(1:length(v))){

f[,,j]=v[j]*m

}
return(f)
}

my_fct(m,v)

, , 1

     [,1] [,2] [,3]
[1,]    2    8   14
[2,]    4   10   16
[3,]    6   12   18

, , 2

     [,1] [,2] [,3]
[1,]    3   12   21
[2,]    6   15   24
[3,]    9   18   27

, , 3

     [,1] [,2] [,3]
[1,]    4   16   28
[2,]    8   20   32
[3,]   12   24   36

希望我的要求很明确!

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

由于 'v' 是一个向量,我们希望每个元素都乘以相同的 matrix 'm',一个选项是循环遍历 'v' 的元素并进行乘法

lapply(v, `*`, m)

-输出

[[1]]
     [,1] [,2] [,3]
[1,]    2    8   14
[2,]    4   10   16
[3,]    6   12   18

[[2]]
     [,1] [,2] [,3]
[1,]    3   12   21
[2,]    6   15   24
[3,]    9   18   27

[[3]]
     [,1] [,2] [,3]
[1,]    4   16   28
[2,]    8   20   32
[3,]   12   24   36

答案 1 :(得分:2)

另一个基本的 R 选项

> Map(`*`, list(m), v)
[[1]]
     [,1] [,2] [,3]
[1,]    2    8   14
[2,]    4   10   16
[3,]    6   12   18

[[2]]
     [,1] [,2] [,3]
[1,]    3   12   21
[2,]    6   15   24
[3,]    9   18   27

[[3]]
     [,1] [,2] [,3]
[1,]    4   16   28
[2,]    8   20   32
[3,]   12   24   36
相关问题