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)
看起来很简单,看上去并没有运气。
答案 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))