hmeap-0.9: cmd/stat.hs
-- Use hmatrix GSL bindings to do basic statistical analysis.
import Control.Monad
import qualified Data.Array.Unboxed as A
import Data.List
import qualified Data.Packed.Matrix as G
import qualified Numeric.Container as G
import qualified Sound.Analysis.Meapsoft as M
import System.Environment
fromArray :: A.UArray (Int, Int) Double -> G.Matrix Double
fromArray m = (r G.>< c) (A.elems m)
where ((r0,c0),(r1,c1)) = A.bounds m
r = r1-r0+1
c = c1-c0+1
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 = fromArray 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.minElement vs)
(map G.minIndex vs))
(zip (map G.maxElement vs)
(map G.maxIndex vs))
(zip (map G.absSum vs)
(map G.norm2 vs))
(map ((/ nf) . G.absSum) vs)
mapM_ (putStrLn . show) r