2014-02-19 247 views
0

創建陣列我稱一個矩陣A:基於矩陣和矢量

A=matrix(c(1,2,3,4),nrow=2,ncol=2) 

然後我想獲得的陣列,這是基於在載體上,說a=c(1,0.5,2),以下面的方式:

1A =矩陣(c(1,2,3,4),nrow = 2,ncol = 2)

0.5A =矩陣(c(0.5,1,1.5,2),nrow = 2,ncol = 2)

2A =矩陣(c(2,4,6,8),nrow = 2,ncol = 2)

所以我想矩陣1A在陣列的第一維度,0.5A在陣列的第二維度和最後2A在陣列的第三維度。

謝謝。

回答

0

使用simplify = 'array'sapply

sapply(c(1,0.5,2),'*',A,simplify='array') 
# , , 1 
# 
#  [,1] [,2] 
# [1,] 1 3 
# [2,] 2 4 
# 
# , , 2 
# 
#  [,1] [,2] 
# [1,] 0.5 1.5 
# [2,] 1.0 2.0 
# 
# , , 3 
# 
#  [,1] [,2] 
# [1,] 2 6 
# [2,] 4 8 

或者kronecker獲得兩個數組

kronecker(array(c(1,0.5,2),c(1,1,3)),A) 
# , , 1 
# 
#  [,1] [,2] 
# [1,] 1 3 
# [2,] 2 4 
# 
# , , 2 
# 
#  [,1] [,2] 
# [1,] 0.5 1.5 
# [2,] 1.0 2.0 
# 
# , , 3 
# 
#  [,1] [,2] 
# [1,] 2 6 
# [2,] 4 8 
+0

十分感謝的直積。你知道嗎,哪一個最有效率? –

+0

@ Ku-trala'kronecker'是's4'方法,所以方法調度和任何複製都需要時間。 'sapply'稱之爲「簡化數組」,這是臭名昭着的「慢」。方法調度和簡化數組速度之間的折衷取決於輸入和結果的大小。 – mnel