Commit f455b5b4 authored by Alexandre Delanoë's avatar Alexandre Delanoë

[FEAT] Distributional (WIP)

parent e510b73c
...@@ -54,10 +54,11 @@ import qualified Gargantext.Prelude as P ...@@ -54,10 +54,11 @@ import qualified Gargantext.Prelude as P
-- * Distributional Distance -- * Distributional Distance
distributional'' :: ( P.Num (Exp a) distributional'' :: ( P.Num (Exp a)
, P.Fractional (Exp a) , P.Fractional (Exp a)
, Elt a , P.Ord (Exp a)
, Ord a
) )
=> Matrix a -> Matrix a => Matrix a -> Matrix a
distributional'' m' = run $ mi_d_mi distributional'' m' = run mi_d_mi
where where
m = use m' m = use m'
n = dim m' n = dim m'
...@@ -68,11 +69,26 @@ distributional'' m' = run $ mi_d_mi ...@@ -68,11 +69,26 @@ distributional'' m' = run $ mi_d_mi
d_m_o = (#*#) d_m (matrixOne n) d_m_o = (#*#) d_m (matrixOne n)
mi = (.*) ((./) m o_d_m) ((./) m o_d_m) mi = (.*) ((./) m o_d_m) ((./) m d_m_o)
d_mi = (.*) (matrixIdentity n) mi d_mi = (.*) (matrixIdentity n) mi
mi_d_mi = (.-) mi d_mi mi_d_mi = (.-) mi d_mi
-- WIP (specs describe iteration on vectors, using full matrix version here)
d_mi_d_mi = (.*) (matrixIdentity n) mi_d_mi
min_mi_mj = zipWith min d_mi_d_mi d_mj_d_mj
where
-- not sure about transpose here
-- maybe backpermute j to i cells ?
d_mj_d_mj = transpose d_mi_d_mi
sum_min_mi_mj = matSumCol n min_mi_mj
sum_mi = matSumCol n d_mi_d_mi
result = zipWith (/) sum_min_mi_mj sum_mi
......
...@@ -64,6 +64,16 @@ import Data.Array.Accelerate.LinearAlgebra hiding (Matrix, transpose, Vector) ...@@ -64,6 +64,16 @@ import Data.Array.Accelerate.LinearAlgebra hiding (Matrix, transpose, Vector)
-> Acc (Array ((ix :. Int) :. Int) a) -> Acc (Array ((ix :. Int) :. Int) a)
(.*) = zipWith (*) (.*) = zipWith (*)
(.**) :: ( Shape ix
, Slice ix
, Elt a
, P.Num (Exp a)
)
=> Acc (Array ((ix :. Int) :. Int) a)
-> Acc (Array ((ix :. Int) :. Int) a)
(.**) m = (.*) m m
(./) :: ( Shape ix (./) :: ( Shape ix
, Slice ix , Slice ix
, Elt a , Elt a
...@@ -179,10 +189,10 @@ dim m = n ...@@ -179,10 +189,10 @@ dim m = n
-- [ 12.0, 15.0, 18.0, -- [ 12.0, 15.0, 18.0,
-- 12.0, 15.0, 18.0, -- 12.0, 15.0, 18.0,
-- 12.0, 15.0, 18.0] -- 12.0, 15.0, 18.0]
matSumCol :: Dim -> Acc (Matrix Double) -> Acc (Matrix Double) matSumCol :: (Elt a, P.Num (Exp a)) => Dim -> Acc (Matrix a) -> Acc (Matrix a)
matSumCol r mat = replicate (constant (Z :. (r :: Int) :. All)) $ sum $ transpose mat matSumCol r mat = replicate (constant (Z :. (r :: Int) :. All)) $ sum $ transpose mat
matSumCol' :: Matrix Double -> Matrix Double matSumCol' :: (Elt a, P.Num (Exp a)) => Matrix a -> Matrix a
matSumCol' m = run $ matSumCol n m' matSumCol' m = run $ matSumCol n m'
where where
n = dim m n = dim m
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment