2016-05-03 74 views
1

我有一個6,6,51陣列和一個51,6矩陣。我想要將矩陣1的第1行乘以矩陣中的第1行,然後將其作爲結果進行存儲。我想再次爲陣列中包含的每個矩陣中的每一行執行此操作。所以我會把數組中的第一個矩陣的第二行乘以矩陣的第一行。一旦我遍歷了數組中第一個矩陣的所有6行,我想在數組中的其餘50個矩陣上做同樣的事情。數組乘以矩陣中的各行

爲了幫助闡述我所問的問題,我將給出一個使用6,6,3數組和3,6矩陣的簡短例子。 ,我會做出一些數字,以便更容易查看:

array1 <- array(1:108, c(6,6,3)) 

[,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 7 13 19 25 31 
[2,] 2 8 14 20 26 32 
[3,] 3 9 15 21 27 33 
[4,] 4 10 16 22 28 34 
[5,] 5 11 17 23 29 35 
[6,] 6 12 18 24 30 36 

, , 2 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 37 43 49 55 61 67 
[2,] 38 44 50 56 62 68 
[3,] 39 45 51 57 63 69 
[4,] 40 46 52 58 64 70 
[5,] 41 47 53 59 65 71 
[6,] 42 48 54 60 66 72 

, , 3 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 73 79 85 91 97 103 
[2,] 74 80 86 92 98 104 
[3,] 75 81 87 93 99 105 
[4,] 76 82 88 94 100 106 
[5,] 77 83 89 95 101 107 
[6,] 78 84 90 96 102 108 

matrix1 <- matrix(1:18, nrow = 3, ncol = 6) 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 4 7 10 13 16 
[2,] 2 5 8 11 14 17 
[3,] 3 6 9 12 15 18 

基本上我想這樣做:

在矩陣1的陣列1 X ROW1矩陣1 ROW1

1*1 + 7*4 + 13*7 + 19*10 +25*13 + 31*16 = result 

然後做矩陣1的2行中的矩陣1

等等等等起來的陣列1 X ROW1直到矩陣1的6行陣列1

然後在矩陣1的矩陣2上重複使用矩陣1的行2

這是否可理解?

如果有人可以幫忙嗎?

另外,有沒有辦法將矩陣1拆分成矢量?所以我可以得到51個獨立的向量來乘以每個數組?

問候

+0

這看起來像R.如果是這樣,標記它。如果不是,則用適當的語言標籤標記它。 –

+0

你確定矩陣的大小?它不應該是6 x 6嗎?因爲如果我們有一個尺寸爲6×6×51的數組,那麼將會有51個矩陣爲6×6。如果你的問題是正確的,你需要乘以一個6×51矩陣與6×6矩陣。 –

+1

如果Kunal Puri提出的矩陣維數爲6 x 6,解決方案可能是:''apply(array1,3,function(x)rowSums(matrix1 * x))'' – Phann

回答

0

好吧,因爲我仍然不知道,如果你的意思是6×3矩陣或6×6矩陣,來了這兩種情況下的解決方案(類似我的評論):

Rows <- min(dim(array1)[1], dim(matrix1)[1]) 
Cols <- min(dim(array1)[2], dim(matrix1)[2]) 

apply(array1, 3, function(x) rowSums(matrix1 * x[1:Rows,1:Cols])) 

然後忽略array1的其他行和列,然後將其與matrix1不匹配。

簡要說明如何到達解決方案: 取出陣列的第一個平面並嘗試獲得所需的解決方案。

array1[ , , 1] * matrix1 #or array1[1:Rows, 1:Cols, 1] * matrix1 

rowSums按照它的名稱給出每行的總和。因此,陣列中第一個平面的結果與矩陣相乘,並總結爲矢量。

rowSums(array1[1:Rows, 1:Cols, 1] * matrix1) 
# 1131 1284 1449 

結果似乎是正確的,現在我們可以apply在數組中的每個矩陣解決方案,如圖答案的最頂端。