2012-03-25 25 views
3

Ich habe eine 2D-Matrix, die ich in eine 3D-Matrix, beispielsweise hinzufügen müssen:hinzufügen 2D-Matrix in 3D-Matrix

mx3d <- array(1:60, c(3,4,5)) 
mx2d <- array(letters[1:15], c(3,5)) 

Ist es möglich, dieses Add mx2d in mx3d so dass mx3d.new wird eine 3x5x5 Matrix ? Wäre es einfacher, wenn ich die Matrix als Liste umwandeln würde? Vielen Dank!

Um deutlich zu machen, auf das, was wir haben in mx2d und mx3d, ich möchte, wie etwas haben:

> mx3d.new 
, , 1 

    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 4 7 10 "a" 
[2,] 2 5 8 11 "b" 
[3,] 3 6 9 12 "c" 

, , 2 

    [,1] [,2] [,3] [,4] [,5] 
[1,] 13 16 19 22 "d" 
[2,] 14 17 20 23 "e" 
[3,] 15 18 21 24 "f" 

, , 3 

    [,1] [,2] [,3] [,4] [,5] 
[1,] 25 28 31 34 "g" 
[2,] 26 29 32 35 "h" 
[3,] 27 30 33 36 "i" 

, , 4 

    [,1] [,2] [,3] [,4] [,5] 
[1,] 37 40 43 46 "j" 
[2,] 38 41 44 47 "k" 
[3,] 39 42 45 48 "l" 

, , 5 

    [,1] [,2] [,3] [,4] [,5] 
[1,] 49 52 55 58 "m" 
[2,] 50 53 56 59 "n" 
[3,] 51 54 57 60 "o" 
+0

Was meinst du mit "add in"? Wenn Sie Matrixaddition meinen, wird Matrixaddition nur für Matrizen derselben Größe definiert. –

+0

Bitte beachten Sie die aktualisierte Frage. Danke! – Rock

Antwort

6
library(abind) 
mx3d.new <- abind(mx3d, mx2d, along= 2) 
for(i in 1:5) print(mx3d.new[,,i]) 

funktioniert das?

Es gibt mir dies:

> for(i in 1:5) print(mx3d.new[,,i]) 

    [,1] [,2] [,3] [,4] [,5] 

[1,] "1" "4" "7" "10" "a" 

[2,] "2" "5" "8" "11" "b" 

[3,] "3" "6" "9" "12" "c" 

    [,1] [,2] [,3] [,4] [,5] 

[1,] "13" "16" "19" "22" "d" 

[2,] "14" "17" "20" "23" "e" 

[3,] "15" "18" "21" "24" "f" 

    [,1] [,2] [,3] [,4] [,5] 

[1,] "25" "28" "31" "34" "g" 

[2,] "26" "29" "32" "35" "h" 

[3,] "27" "30" "33" "36" "i" 

    [,1] [,2] [,3] [,4] [,5] 

[1,] "37" "40" "43" "46" "j" 

[2,] "38" "41" "44" "47" "k" 

[3,] "39" "42" "45" "48" "l" 

    [,1] [,2] [,3] [,4] [,5] 
[1,] "49" "52" "55" "58" "m" 

[2,] "50" "53" "56" "59" "n" 

[3,] "51" "54" "57" "60" "o" 
+0

Danke Jim. Ich muss sagen, es ist ziemlich cool! Ich wusste nie von "abind". Vielen Dank! – Rock

2

Ich bin nicht sicher, ich verstehe Ihre Frage richtig, aber tut

mx3d.new <- array(letters[1:75],c(3,5,5)) 

geben Sie, was Sie möchten? Oder wenn Sie es wiederholen möchten,

mx3d.new <- array(letters[1:15],c(3,5,5)) 

Vielleicht, wenn Sie etwas Kontext des Problems Sie lösen möchten geben, würde ich in der Lage sein, mehr Hilfe zu geben.

Cheers, Jim

+0

Ich habe eine weitere Beschreibung der Frage hinzugefügt. Hoffe es erklärt sich. – Rock