2016-06-21 2 views
3

Ich habe eine zweidimensionale Matrix, die ich 10 Mal replizieren möchte, um ein dreidimensionales Array zu erstellen, in dem jede 'Scheibe' des Arrays eine identische Kopie von ist das zweidimensionale Array.2-dimensionale Matrix replizieren, um ein 3-dimensionales Array zu erstellen (in R)

Also, wenn meine 2D-Array sein waren:

a <- matrix(c(1:4),nrow=2) 
> a 
    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

würde ich als Ausgabe wie ein Array wie folgt aus:

, , 1 

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

, , 2 

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

.... 

, , 10 

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

ich diese Seite gesehen haben (Duplicate matrix to form list), in dem der OP suchte, Matrizen zu einer Liste zu duplizieren, die ich anwandelte, um dann zu einem Array zu konvertieren:

b<-rep(list(a), 10) # from original post 
array(unlist(b), dim = c(nrow(b[[1]]), ncol(b[[1]]), length(b))) # line I added 

This Funktioniert gut, aber es ist ein kleiner Kreisverkehr - ich habe mich gefragt, ob es eine Möglichkeit gibt, dies in einer Zeile zu tun, ohne eine Liste zu erstellen.

ich versuchte, die Logik eines do.call in der Art und Weise der Anwendung, die mit rbind getan wird, um mehrere Reihen aneinander zu binden, sondern unter Verwendung von abind -

do.call(abind,as.list(c(a,a,a,a,a,a,a,a,a,a))) 

aber der Ausgang war ein langer Vektor und so nicht wonach ich gesucht habe.

Jede Hilfe wird sehr geschätzt!

+2

Ändern Ihres Ansatz ein wenig, könnten Sie 'Array (a, c (dim (a), 10))' Ausnutzen von –

+0

auch eine gute Idee Recycling, danke! –

Antwort

3

können Sie replicate verwenden, die eine Liste standardmäßig erzeugt. Um ein Array zu erhalten, füge simplify = "array" hinzu.

replicate(10, a, simplify="array") 

, , 1 

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

, , 2 

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

... 

, , 9 

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

, , 10 

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