v1 <- c(1,2)
v2 <- c(3,4,5,6)
有没有办法将这两个向量相乘,使得结果是一个向量 dim(1,3)
例如(11,14,17)
这类似于所有可能的 dim(1,2) 乘法组合,例如
(1,2) %x% t(3,4)
, (1,2) %x% t(4,5)
,(1,2) %x% t(5,6)
看起来很简单,看了也没有运气。
v1 <- c(1,2)
v2 <- c(3,4,5,6)
有没有办法将这两个向量相乘,使得结果是一个向量 dim(1,3)
例如(11,14,17)
这类似于所有可能的 dim(1,2) 乘法组合,例如
(1,2) %x% t(3,4)
, (1,2) %x% t(4,5)
,(1,2) %x% t(5,6)
看起来很简单,看了也没有运气。
创建一个 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
使用子集和cbind
创建组合矩阵,然后通过乘法应用到此行。
apply(cbind(v2[-length(v2)],v2[-1]),1,function(x) v1%*%x)
[1] 11 14 17
另外的选择:
na.omit(filter(v2, rev(v1)))
你也可以使用embed
:
apply(embed(v2, 2), 1, FUN='%*%', rev(v1))
类似于詹姆斯的回答,但可能更简单:
sapply(1:(length(v2)-1), function(j) sum(v1*v2[j:j+1]))
由于您只是将向量相乘(又名 1×N 矩阵 :-)),因此无需深入研究矩阵运算。