Haskell / repa - есть ли способ красиво печатать матрицы?
Используя repa в haskell, есть ли способ напечатать матрицы, чтобы они были красиво отформатированы так, чтобы строки матрицы находились на отдельных строках (по умолчанию для большинства сред численных вычислений, таких как R или matlab)?
Я мог бы написать один, но это похоже на то, что уже существует.
Этот тип вывода неудобен для взаимодействия с:
λ> foo
AUnboxed ((Z :. 3) :. 5) (fromList [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
1 ответ
Решение
Это работает для меня. Может стоит добавить в repa или в пакет repa-extras?
{-# LANGUAGE FlexibleInstances #-}
module PrettyPrint where
import Data.Array.Repa
import Data.Array.Repa.Algorithms.Matrix
import Text.PrettyPrint
import Text.PrettyPrint.HughesPJClass
instance (Source t a, Pretty a) => Pretty (Array t DIM1 a) where
pPrint a = brackets $ hcat $ punctuate (comma <> space) elems
where
elems = [ pPrint (a!j) | i <- [0..n-1], let j = Z :. i ]
Z :. n = extent a
instance (Source t a, Pretty a) => Pretty (Array t DIM2 a) where
pPrint a = vcat elems
where
elems = [ pPrint (slice a j) | i <- [0..n-1], let j = Any :. i :. All]
Z :. n :. _m = extent a