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