Haskell / repa - 是否有一种方式可以漂亮地打印矩阵?

3
使用Haskell中的repa,有没有一种方法可以打印矩阵并使其格式整齐,使矩阵行在不同的行上(这是大多数数值计算环境如R或matlab的默认设置)?
我可以编写一个,但似乎已经存在了。
这种输出方式不太容易与之交互。
λ> foo
AUnboxed ((Z :. 3) :. 5) (fromList [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) 
1个回答

2
这对我很有帮助。也许值得将其添加到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

谢谢。是的,这似乎很基础。我不知道其他人如何在没有这样一个基本工具的情况下进行编程。也许有些人正在批处理模式下使用repa而不是交互式地使用它。 - daj
顺便问一下,你现在大多使用 hmatrix 还是 repa?hmatrix 的成熟度是否仍然胜过 repa 的优势? - daj
这取决于应用程序。如果您想解决如扩散之类的问题,则 repa 可能更合适。如果您要进行标准线性代数计算,那么 hmatrix 可能更好。另外,hmatrix 还有一个很好的静态模块。最好在 repa 之上添加类似这样的内容。 - idontgetoutmuch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接