2016-06-29 8 views
1

stapeln, da Arrays von gleicher Länge sind zwei 1-D Angenommen:Wie Arrays in repa (Haskell)

let x = fromListUnboxed (ix1 4) [1, 2, 3, 4] 
let y = fromListUnboxed (ix1 4) [5, 6, 7, 8] 

jetzt so Ich möchte diese beiden Arrays in eine 2-D-Array stapeln, dass diese Arrays bilden die Zeilen. Wie kann ich es in Repa machen?

Grundsätzlich suche ich nach einem Äquivalent von numpy des row_stack:

>>> x = np.array([1, 2, 3, 4]) 
>>> y = np.array([5, 6, 7, 8]) 
>>> np.row_stack((x, y)) 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 

Hinweis. Die beiden Arrays x und y kommen von außen, d. H. Ich kann das 2-D-Array nicht von Grund auf neu erstellen.

+0

anzuzeigen hacken denke ich, alles, was Sie brauchen, um 'ist reshape' das 'X' und 'Y' Arrays 2D zu sein und dann' append "Sie. – Alec

Antwort

1

Wie ich bereits in dem Anfang Kommentar erwähnt, alles, was Sie brauchen, ist zu reshape dann append (beide in Data.Array.Repa.

ghci> let x' = reshape (ix2 4 1) x 
ghci> let y' = reshape (ix2 4 1) y 
ghci> z <- computeP $ x' `append` y' :: IO (Array U DIM2 Int) 
ghci> z 
AUnboxed ((Z :. 4) :. 2) [1,5,2,6,3,7,4,8] 

Was ziemlich Druck ist repa nicht sehr gut (wahrscheinlich, weil es keine gut ziemlich Druck für höhere Dimensionen). Hier ist eine einzeilige z

ghci> putStr $ unlines [ unwords [ show $ z ! ix2 i j | i<-[0..3] ] | j<-[0..1] ] 
1 2 3 4 
5 6 7 8 
+0

Danke, das war's. Nur aus Neugier - ist es möglich zu kontrollieren, in welcher Dimension die Arrays angehängt werden? Oder ist es nur in der letzten? – zegkljan

+0

@zegkljan Ich denke nicht, dass es einen glatten allgemeinen Ansatz dafür gibt - Sie müssten die Form ändern, anhängen und dann die Form zurück ändern. Für zwei Dimensionen kann man 'transpose' verwenden, aber ansonsten würde ich mit' backpermute' gehen. Denken Sie daran, dass auch 'col_stack' für numpy nur für 1D-Argumente funktioniert - es gibt einfach keine einfache Möglichkeit, sowohl' row_stack' als auch 'col_stack' zu N Dimensionen zu verallgemeinern. – Alec