module Statistics.Function
(
minMax
, sort
, partialSort
) where
import Data.Array.Vector.Algorithms.Combinators (apply)
import Data.Array.Vector ((:*:)(..), UA, UArr, foldlU)
import qualified Data.Array.Vector.Algorithms.Intro as I
sort :: (UA e, Ord e) => UArr e -> UArr e
sort = apply I.sort
partialSort :: (UA e, Ord e) =>
Int
-> UArr e
-> UArr e
partialSort k = apply (\a -> I.partialSort a k)
data MM = MM !Double !Double
minMax :: UArr Double -> Double :*: Double
minMax = fini . foldlU go (MM (1/0) (1/0))
where
go (MM lo hi) k = MM (min lo k) (max hi k)
fini (MM lo hi) = lo :*: hi