Как складывать массивы в репа (Haskell)

Предположим, есть два одномерных массива одинаковой длины:

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

Теперь я хотел бы объединить эти два массива в один двумерный массив, чтобы эти массивы образовывали строки. Как я могу сделать это в Repa?

В основном, я ищу эквивалент Numpy's 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]])

Заметка. Два массива, x а также y, пришел извне, т.е. я не могу создать 2-D массив с нуля.

1 ответ

Решение

Как я уже упоминал в первоначальном комментарии, все, что вам нужно, это reshape затем append (оба в 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]

Что касается симпатичной печати, repa не очень хорошо (вероятно, потому что нет хорошей красивой печати для больших размеров). Вот взлом на одну строку для отображения z

ghci> putStr $ unlines [ unwords [ show $ z ! ix2 i j  |  i<-[0..3] ] | j<-[0..1] ]
1 2 3 4
5 6 7 8
Другие вопросы по тегам