module Data.Packed.Repa (
vectorToRepa
, repaToVector
, matrixToRepa
, repaToMatrix
) where
import qualified Data.Packed.Vector as HV
import qualified Data.Packed.Matrix as HM
import Foreign.Storable
import Data.Vector.Storable
import qualified Data.Array.Repa as RA
vectorToRepa :: (Storable a, RA.Elt a)
=> HV.Vector a
-> RA.Array RA.DIM1 a
vectorToRepa v = let ln = HV.dim v
in RA.fromVector (RA.Z RA.:. ln) $ convert v
repaToVector :: (Storable a, RA.Elt a)
=> RA.Array RA.DIM1 a
-> HV.Vector a
repaToVector = convert . RA.toVector
matrixToRepa :: (Storable a, HM.Element a, RA.Elt a)
=> HM.Matrix a
-> RA.Array RA.DIM2 a
matrixToRepa m = let (r,c) = (HM.rows m,HM.cols m)
in RA.fromVector (RA.Z RA.:. r RA.:. c) $ convert $ HM.flatten m
repaToMatrix :: (Storable a, RA.Elt a)
=> RA.Array RA.DIM2 a
-> HM.Matrix a
repaToMatrix a = let (RA.Z RA.:. r RA.:. c) = RA.extent a
in HM.reshape c $ convert $ RA.toVector a