1
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)

看起来很简单,看了也没有运气。

4

4 回答 4

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
于 2014-01-22T13:45:45.207 回答
3

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

apply(cbind(v2[-length(v2)],v2[-1]),1,function(x) v1%*%x)
[1] 11 14 17
于 2014-01-22T13:40:16.470 回答
1

另外的选择:

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

你也可以使用embed

apply(embed(v2, 2), 1, FUN='%*%', rev(v1))
于 2014-01-22T14:55:07.833 回答
1

类似于詹姆斯的回答,但可能更简单:

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

由于您只是将向量相乘(又名 1×N 矩阵 :-)),因此无需深入研究矩阵运算。

于 2014-01-22T14:27:45.173 回答