2014-01-22 78 views
1
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)

看起來很簡單,看上去沒有運氣。

+1

不是有6個可能的組合,而不是3? – James

回答

3

使用子集和cbind來創建您的組合矩陣,然後在您的乘法中應用這些矩陣的行。

apply(cbind(v2[-length(v2)],v2[-1]),1,function(x) v1%*%x) 
[1] 11 14 17 
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

類似詹姆斯的回答,但也許更簡單:

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

既然你只乘以向量(又名1乘N矩陣:-)),沒有必要潛入矩陣運算。

1

另一種選擇:

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

您還可以使用embed

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