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)
看起來很簡單,看上去沒有運氣。
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)
看起來很簡單,看上去沒有運氣。
使用子集和cbind
來創建您的組合矩陣,然後在您的乘法中應用這些矩陣的行。
apply(cbind(v2[-length(v2)],v2[-1]),1,function(x) v1%*%x)
[1] 11 14 17
創建一個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
類似詹姆斯的回答,但也許更簡單:
sapply(1:(length(v2)-1), function(j) sum(v1*v2[j:j+1]))
既然你只乘以向量(又名1乘N矩陣:-)),沒有必要潛入矩陣運算。
另一種選擇:
na.omit(filter(v2, rev(v1)))
您還可以使用embed
:
apply(embed(v2, 2), 1, FUN='%*%', rev(v1))
不是有6個可能的組合,而不是3? – James