我可以乘以不同长度的向量吗?

时间:2014-01-22 13:34:11

标签: r vector vector-multiplication

v1 <- c(1,2)
v2 <- c(3,4,5,6)

有没有办法将这两个向量相乘,结果是向量暗(1,3)
例如(11,14,17)

这类似于所有可能的暗(1,2)乘法组合,例如 (1,2) %x% t(3,4)(1,2) %x% t(4,5)(1,2) %x% t(5,6)

看起来很简单,看上去并没有运气。

4 个答案:

答案 0 :(得分:7)

创建一个2行矩阵:

> rbind(v2[-length(v2)],v2[-1])
     [,1] [,2] [,3]
[1,]    3    4    5
[2,]    4    5    6

然后它只是矩阵多:

> v1 %*% rbind(v2[-length(v2)],v2[-1])
     [,1] [,2] [,3]
[1,]   11   14   17

和子集,如果你想要一个矢量:

> (v1 %*% rbind(v2[-length(v2)],v2[-1]))[1,]
[1] 11 14 17

答案 1 :(得分:3)

使用子集和cbind创建组合矩阵,然后通过乘法应用于此行。

apply(cbind(v2[-length(v2)],v2[-1]),1,function(x) v1%*%x)
[1] 11 14 17

答案 2 :(得分:1)

与James&#39;相似回答,但也许更简单:

sapply(1:(length(v2)-1), function(j) sum(v1*v2[j:j+1]))

由于你只是乘以向量(也就是1乘N矩阵:-)),所以不需要深入到矩阵运算中。

答案 3 :(得分:1)

另一种选择:

na.omit(filter(v2, rev(v1)))

您也可以使用embed

apply(embed(v2, 2), 1, FUN='%*%', rev(v1))