2016-01-11 2 views
2

Использование repa в haskell, есть ли способ печати матриц, чтобы они были хорошо отформатированы с матричными рядами, находящимися на отдельных строках (по умолчанию для большинства вычислительных сред, таких как R или Matlab)?Haskell/repa - есть ли способ печати матриц?

Я мог бы написать один, но он кажется тем, что уже существует.

Этот тип выхода громоздким для взаимодействия с:

λ> foo 
AUnboxed ((Z :. 3) :. 5) (fromList [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) 

ответ

2

Это работает для меня. Может быть, стоит добавить в репа или пакет репа-экстра?

{-# 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 
+0

Спасибо. Да, это кажется довольно простым. Я не знаю, как обойтись без такой простой вещи. Возможно, некоторые люди используют repa в пакетном режиме, а не в интерактивном режиме. – daj

+0

Кстати, вы в основном используете hmatrix over repa в эти дни? действительно ли зрелость hmatrix все еще превзошла преимущества repa? – daj

+0

Зависит от приложения. Если вы хотите разрешить что-то вроде диффузии, то, вероятно, подходит. Если вы хотите сделать стандартную линейную алгебру, то hmatrix, вероятно, лучше. Также hmatrix имеет хороший статический модуль. Было бы неплохо добавить что-то вроде этого поверх репутации. – idontgetoutmuch

Смежные вопросы