Как складывать массивы в репа (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