packages feed

hmeap-0.7: Help/stat.hs

-- Use hmatrix GSL bindings to do basic statistical analysis.

import Control.Monad
import Data.Function
import Data.List
import qualified Data.Packed.Convert as G
import qualified Data.Packed.Matrix as G
import qualified Data.Packed.Vector as G
import qualified Numeric.GSL.Vector as G
import qualified Sound.Analysis.Meapsoft as M
import System.Environment
import System.IO

main :: IO ()
main =
    do a <- getArgs
       unless (length a == 1)
              (error "feature-file")
       let [fn] = a
       (Right mp) <- M.read_meap fn
       let nf = fromIntegral (M.n_frames mp)
           uf = filter ((== 1) . M.feature_degree) (M.features mp)
           ar = M.uarray_data mp
           m = G.matrixFromArray ar
           ufc = map M.feature_column uf
           vs = G.toRows (G.extractRows ufc (G.trans m))
           r = zip5 (map M.feature_name uf)
                    (zip (map G.vectorMin vs)
                         (map G.vectorMinIndex vs))
                    (zip (map G.vectorMax vs)
                         (map G.vectorMaxIndex vs))
                    (zip (map (G.toScalarR G.AbsSum) vs)
                         (map (G.toScalarR G.Norm2) vs))
                    (map ((/ nf) . G.toScalarR G.AbsSum) vs)
       mapM_ (putStrLn . show) r