{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module ArrayFire.Statistics where
import Data.Word (Word32)
import Foreign.Ptr (nullPtr)
import ArrayFire.Array
import ArrayFire.FFI
import ArrayFire.Internal.Statistics
import ArrayFire.Internal.Types
mean
:: (AFType a, Fractional a)
=> Array a
-> Int
-> Array a
mean :: forall a. (AFType a, Fractional a) => Array a -> Int -> Array a
mean Array a
a Int
n =
Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
x AFArray
y ->
Ptr AFArray -> AFArray -> DimT -> IO AFErr
af_mean Ptr AFArray
x AFArray
y (Int -> DimT
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n))
meanWeighted
:: (AFType a, Fractional a)
=> Array a
-> Array a
-> Int
-> Array a
meanWeighted :: forall a.
(AFType a, Fractional a) =>
Array a -> Array a -> Int -> Array a
meanWeighted Array a
x Array a
y (Int -> DimT
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> DimT
n) =
Array a
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
forall b a c.
Array b
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array c
op2 Array a
x Array a
y ((Ptr AFArray -> AFArray -> AFArray -> IO AFErr) -> Array a)
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr) -> Array a
forall a b. (a -> b) -> a -> b
$ \Ptr AFArray
a AFArray
b AFArray
c ->
Ptr AFArray -> AFArray -> AFArray -> DimT -> IO AFErr
af_mean_weighted Ptr AFArray
a AFArray
b AFArray
c DimT
n
var
:: (AFType a, Fractional a)
=> Array a
-> VarianceType
-> Int
-> Array a
var :: forall a.
(AFType a, Fractional a) =>
Array a -> VarianceType -> Int -> Array a
var Array a
arr (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (VarianceType -> Int) -> VarianceType -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. VarianceType -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) Int
d =
Array a
arr Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
x ->
Ptr AFArray -> AFArray -> CBool -> DimT -> IO AFErr
af_var Ptr AFArray
p AFArray
x CBool
b (Int -> DimT
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
d))
data VarianceType = Population | Sample
deriving (Int -> VarianceType -> ShowS
[VarianceType] -> ShowS
VarianceType -> String
(Int -> VarianceType -> ShowS)
-> (VarianceType -> String)
-> ([VarianceType] -> ShowS)
-> Show VarianceType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VarianceType -> ShowS
showsPrec :: Int -> VarianceType -> ShowS
$cshow :: VarianceType -> String
show :: VarianceType -> String
$cshowList :: [VarianceType] -> ShowS
showList :: [VarianceType] -> ShowS
Show, VarianceType -> VarianceType -> Bool
(VarianceType -> VarianceType -> Bool)
-> (VarianceType -> VarianceType -> Bool) -> Eq VarianceType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VarianceType -> VarianceType -> Bool
== :: VarianceType -> VarianceType -> Bool
$c/= :: VarianceType -> VarianceType -> Bool
/= :: VarianceType -> VarianceType -> Bool
Eq, Int -> VarianceType
VarianceType -> Int
VarianceType -> [VarianceType]
VarianceType -> VarianceType
VarianceType -> VarianceType -> [VarianceType]
VarianceType -> VarianceType -> VarianceType -> [VarianceType]
(VarianceType -> VarianceType)
-> (VarianceType -> VarianceType)
-> (Int -> VarianceType)
-> (VarianceType -> Int)
-> (VarianceType -> [VarianceType])
-> (VarianceType -> VarianceType -> [VarianceType])
-> (VarianceType -> VarianceType -> [VarianceType])
-> (VarianceType -> VarianceType -> VarianceType -> [VarianceType])
-> Enum VarianceType
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: VarianceType -> VarianceType
succ :: VarianceType -> VarianceType
$cpred :: VarianceType -> VarianceType
pred :: VarianceType -> VarianceType
$ctoEnum :: Int -> VarianceType
toEnum :: Int -> VarianceType
$cfromEnum :: VarianceType -> Int
fromEnum :: VarianceType -> Int
$cenumFrom :: VarianceType -> [VarianceType]
enumFrom :: VarianceType -> [VarianceType]
$cenumFromThen :: VarianceType -> VarianceType -> [VarianceType]
enumFromThen :: VarianceType -> VarianceType -> [VarianceType]
$cenumFromTo :: VarianceType -> VarianceType -> [VarianceType]
enumFromTo :: VarianceType -> VarianceType -> [VarianceType]
$cenumFromThenTo :: VarianceType -> VarianceType -> VarianceType -> [VarianceType]
enumFromThenTo :: VarianceType -> VarianceType -> VarianceType -> [VarianceType]
Enum)
varWeighted
:: (AFType a, Fractional a)
=> Array a
-> Array a
-> Int
-> Array a
varWeighted :: forall a.
(AFType a, Fractional a) =>
Array a -> Array a -> Int -> Array a
varWeighted Array a
x Array a
y (Int -> DimT
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> DimT
n) =
Array a
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
forall b a c.
Array b
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array c
op2 Array a
x Array a
y ((Ptr AFArray -> AFArray -> AFArray -> IO AFErr) -> Array a)
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr) -> Array a
forall a b. (a -> b) -> a -> b
$ \Ptr AFArray
a AFArray
b AFArray
c ->
Ptr AFArray -> AFArray -> AFArray -> DimT -> IO AFErr
af_var_weighted Ptr AFArray
a AFArray
b AFArray
c DimT
n
stdev
:: (AFType a, Fractional a)
=> Array a
-> Int
-> Array a
stdev :: forall a. (AFType a, Fractional a) => Array a -> Int -> Array a
stdev Array a
a Int
n =
Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
x AFArray
y ->
Ptr AFArray -> AFArray -> DimT -> IO AFErr
af_stdev Ptr AFArray
x AFArray
y (Int -> DimT
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n))
cov
:: (AFType a, Fractional a)
=> Array a
-> Array a
-> Bool
-> Array a
cov :: forall a.
(AFType a, Fractional a) =>
Array a -> Array a -> Bool -> Array a
cov Array a
x Array a
y (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
n) =
Array a
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
forall b a c.
Array b
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array c
op2 Array a
x Array a
y ((Ptr AFArray -> AFArray -> AFArray -> IO AFErr) -> Array a)
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr) -> Array a
forall a b. (a -> b) -> a -> b
$ \Ptr AFArray
a AFArray
b AFArray
c ->
Ptr AFArray -> AFArray -> AFArray -> CBool -> IO AFErr
af_cov Ptr AFArray
a AFArray
b AFArray
c CBool
n
median
:: (AFType a, Fractional a)
=> Array a
-> Int
-> Array a
median :: forall a. (AFType a, Fractional a) => Array a -> Int -> Array a
median Array a
a Int
n =
Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
x AFArray
y ->
Ptr AFArray -> AFArray -> DimT -> IO AFErr
af_median Ptr AFArray
x AFArray
y (Int -> DimT
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n))
meanAll
:: forall a . AFResult a
=> Array a
-> Scalar a
meanAll :: forall a. AFResult a => Array a -> Scalar a
meanAll Array a
arr = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a (Array a
arr Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_mean_all)
meanAllWeighted
:: forall a . AFResult a
=> Array a
-> Array a
-> Scalar a
meanAllWeighted :: forall a. AFResult a => Array a -> Array a -> Scalar a
meanAllWeighted Array a
a Array a
b =
forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a (Array a
-> Array a
-> (Ptr Double -> Ptr Double -> AFArray -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr
-> Array arr
-> (Ptr a -> Ptr b -> AFArray -> AFArray -> IO AFErr)
-> (a, b)
infoFromArray22 Array a
a Array a
b Ptr Double -> Ptr Double -> AFArray -> AFArray -> IO AFErr
af_mean_all_weighted)
varAll
:: forall a . AFResult a
=> Array a
-> VarianceType
-> Scalar a
varAll :: forall a. AFResult a => Array a -> VarianceType -> Scalar a
varAll Array a
a (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (VarianceType -> Int) -> VarianceType -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. VarianceType -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
infoFromArray2 Array a
a ((Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double))
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b. (a -> b) -> a -> b
$ \Ptr Double
x Ptr Double
y AFArray
z ->
Ptr Double -> Ptr Double -> AFArray -> CBool -> IO AFErr
af_var_all Ptr Double
x Ptr Double
y AFArray
z CBool
b)
varAllWeighted
:: forall a . AFResult a
=> Array a
-> Array a
-> Scalar a
varAllWeighted :: forall a. AFResult a => Array a -> Array a -> Scalar a
varAllWeighted Array a
a Array a
b =
forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a (Array a
-> Array a
-> (Ptr Double -> Ptr Double -> AFArray -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr
-> Array arr
-> (Ptr a -> Ptr b -> AFArray -> AFArray -> IO AFErr)
-> (a, b)
infoFromArray22 Array a
a Array a
b Ptr Double -> Ptr Double -> AFArray -> AFArray -> IO AFErr
af_var_all_weighted)
stdevAll
:: forall a . AFResult a
=> Array a
-> Scalar a
stdevAll :: forall a. AFResult a => Array a -> Scalar a
stdevAll Array a
arr = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a (Array a
arr Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_stdev_all)
medianAll
:: forall a . AFResult a
=> Array a
-> Scalar a
medianAll :: forall a. AFResult a => Array a -> Scalar a
medianAll Array a
arr = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a (Array a
arr Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_median_all)
corrCoef
:: forall a . AFResult a
=> Array a
-> Array a
-> Scalar a
corrCoef :: forall a. AFResult a => Array a -> Array a -> Scalar a
corrCoef Array a
a Array a
b =
forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a (Array a
-> Array a
-> (Ptr Double -> Ptr Double -> AFArray -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr
-> Array arr
-> (Ptr a -> Ptr b -> AFArray -> AFArray -> IO AFErr)
-> (a, b)
infoFromArray22 Array a
a Array a
b Ptr Double -> Ptr Double -> AFArray -> AFArray -> IO AFErr
af_corrcoef)
topk
:: AFType a
=> Array a
-> Int
-> TopK
-> (Array a, Array Word32)
topk :: forall a.
AFType a =>
Array a -> Int -> TopK -> (Array a, Array Word32)
topk Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
x) (TopK -> AFTopkFunction
fromTopK -> AFTopkFunction
f)
= Array a
a Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array Word32)
forall a b.
Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array b)
`op2p` (\Ptr AFArray
b Ptr AFArray
c AFArray
d -> Ptr AFArray
-> Ptr AFArray
-> AFArray
-> CInt
-> CInt
-> AFTopkFunction
-> IO AFErr
af_topk Ptr AFArray
b Ptr AFArray
c AFArray
d CInt
x CInt
0 AFTopkFunction
f)
meanVar
:: (AFType a, Fractional a)
=> Array a
-> VarBias
-> Int
-> (Array a, Array a)
meanVar :: forall a.
(AFType a, Fractional a) =>
Array a -> VarBias -> Int -> (Array a, Array a)
meanVar Array a
arr VarBias
bias (Int -> DimT
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> DimT
dim) =
Array a
arr Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
forall a b.
Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array b)
`op2p` (\Ptr AFArray
pMean Ptr AFArray
pVar AFArray
aPtr ->
Ptr AFArray
-> Ptr AFArray
-> AFArray
-> AFArray
-> AFVarBias
-> DimT
-> IO AFErr
af_meanvar Ptr AFArray
pMean Ptr AFArray
pVar AFArray
aPtr AFArray
forall a. Ptr a
nullPtr (VarBias -> AFVarBias
fromVarBias VarBias
bias) DimT
dim)
meanVarWeighted
:: (AFType a, Fractional a)
=> Array a
-> Array a
-> VarBias
-> Int
-> (Array a, Array a)
meanVarWeighted :: forall a.
(AFType a, Fractional a) =>
Array a -> Array a -> VarBias -> Int -> (Array a, Array a)
meanVarWeighted Array a
arr Array a
weights VarBias
bias (Int -> DimT
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> DimT
dim) =
Array a
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
forall a b c d.
Array a
-> Array b
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array c, Array d)
op2p2 Array a
arr Array a
weights ((Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a))
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
forall a b. (a -> b) -> a -> b
$ \Ptr AFArray
pMean Ptr AFArray
pVar AFArray
aPtr AFArray
wPtr ->
Ptr AFArray
-> Ptr AFArray
-> AFArray
-> AFArray
-> AFVarBias
-> DimT
-> IO AFErr
af_meanvar Ptr AFArray
pMean Ptr AFArray
pVar AFArray
aPtr AFArray
wPtr (VarBias -> AFVarBias
fromVarBias VarBias
bias) DimT
dim