2016-05-03 13 views
1

Ich habe eine 6,6,51-Array und eine 51,6-Matrix. Ich möchte Zeile 1 von Matrix 1 im Array mit Zeile 1 in der Matrix multiplizieren und diese dann als Ergebnis speichern. Ich möchte das für jede Zeile in jeder Matrix, die in dem Array enthalten ist, wiederholen. Also nehme ich die zweite Reihe der 1. Matrix in das Array und multipliziere sie mit der ersten Zeile der Matrix. Nachdem ich alle sechs Zeilen der ersten Matrix im Array durchlaufen habe, möchte ich genau dasselbe mit den restlichen 50 Matrizen im Array machen.Array multipliziert mit einzelnen Zeilen in Matrix

Um die Darstellung dessen zu erleichtern, was ich frage, gebe ich ein verkürztes Beispiel mit einem 6,6,3-Array und einer 3,6-Matrix. Ich werde ein paar Zahlen machen, so dass es einfacher ist, zu betrachten:

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 

Im Wesentlichen würde ich dies tun:

row1 die Matrix 1 in array1 x row1 von matrix1

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

dann tun row2 von matrix1 in array1 x row1 von matrix1

etc etc, bis Zeile 6 von matrix1 in array1

dann wiederholen Sie in Matrix 2 von Array1 mit Zeile2 von Matrix1

Ist das verständlich?

Wenn ja, kann jemand helfen?

Gibt es alternativ eine Möglichkeit, matrix1 in Vektoren aufzuteilen? Also könnte ich einfach 51 separate Vektoren erhalten, um sich gegen jedes Array zu multiplizieren?

Grüße

+0

Dies sieht wie R aus. Wenn ja, markieren Sie es als solches. Falls nicht, markieren Sie sie mit dem entsprechenden Sprach-Tag. –

+0

Sind Sie sich über die Größe der Matrix sicher? Sollte es nicht 6 x 6 sein? Denn wenn wir ein Array mit den Dimensionen 6 x 6 x 51 haben, dann wird es 51 Matrizen von 6 x 6 geben. Und wenn deine Frage richtig ist, willst du eine 6 x 51 Matrix mit 6 x 6 Matrix multiplizieren. –

+1

Wenn die Matrix-Dimension 6 x 6 ist, wie Kunal Puri vorgeschlagen, wäre die Lösung wahrscheinlich: "anwenden (array1, 3, Funktion (x) rowSums (matrix1 * x))" – Phann

Antwort

0

Ok, da ich noch nicht sicher bin, wenn Sie 6 x 3 Matrix bedeuten oder 6 x 6 Matrix, kommt hier eine Lösung für beide Fälle (ähnlich zu meinem Kommentar):

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

Weitere Zeilen und Spalten von array1, die nicht zu matrix1 passen, werden dann ignoriert.

Eine kurze Erklärung, wie Sie zur Lösung gelangen: Nehmen Sie die erste Ebene des Arrays und experimentieren Sie, um die gewünschte Lösung zu erhalten.

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

rowSums gibt, wie von seinem Namen erwartet, die Summe jeder Zeile. Das Ergebnis für die erste Ebene im Array multipliziert mit der Matrix und zusammengefasst ist ein Vektor.

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

Das Ergebnis scheint korrekt zu sein, jetzt haben wir diese Lösung auf jeder Matrix des Arrays apply können wie in der obersten Etage der Antwort gezeigt.

Verwandte Themen