Commit 2ae49b1d authored by Alexandre Delanoë's avatar Alexandre Delanoë

[FEAT] Order2 Only

parent e9686670
Pipeline #5621 passed with stages
in 114 minutes and 44 seconds
...@@ -31,19 +31,17 @@ import Test.QuickCheck.Arbitrary ...@@ -31,19 +31,17 @@ import Test.QuickCheck.Arbitrary
import qualified Data.Text as Text import qualified Data.Text as Text
------------------------------------------------------------------------ ------------------------------------------------------------------------
data Similarity = Conditional | Distributional_A | Distributional_B data Similarity = Conditional | Distributional
deriving (Show, Eq) deriving (Show, Eq)
measure :: Similarity -> Matrix Int -> Matrix Double measure :: Similarity -> Matrix Int -> Matrix Double
measure Conditional x = measureConditional x measure Conditional x = measureConditional x
measure Distributional_A x = logDistributional2 1 x measure Distributional x = logDistributional2 x
measure Distributional_B x = logDistributional2 0 x
------------------------------------------------------------------------ ------------------------------------------------------------------------
withMetric :: GraphMetric -> Similarity withMetric :: GraphMetric -> Similarity
withMetric Order1 = Conditional withMetric Order1 = Conditional
withMetric Order2_A = Distributional_A withMetric _ = Distributional
withMetric _ = Distributional_B
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- Order2 type is for keeping Database json compatibility -- Order2 type is for keeping Database json compatibility
......
...@@ -168,16 +168,16 @@ distributional m' = run $ result ...@@ -168,16 +168,16 @@ distributional m' = run $ result
result = termDivNan z_1 z_2 result = termDivNan z_1 z_2
logDistributional2 :: Exp Double -> Matrix Int -> Matrix Double logDistributional2 :: Matrix Int -> Matrix Double
logDistributional2 o m = trace ("logDistributional2, dim=" `mappend` show n) . run logDistributional2 m = trace ("logDistributional2, dim=" `mappend` show n) . run
$ diagNull n $ diagNull n
$ matMaxMini $ matMaxMini
$ logDistributional' o n m $ logDistributional' n m
where where
n = dim m n = dim m
logDistributional' :: Exp Double -> Int -> Matrix Int -> Acc (Matrix Double) logDistributional' :: Int -> Matrix Int -> Acc (Matrix Double)
logDistributional' o n m' = trace ("logDistributional'") result logDistributional' n m' = trace ("logDistributional'") result
where where
-- From Matrix Int to Matrix Double, i.e : -- From Matrix Int to Matrix Double, i.e :
-- m :: Matrix Int -> Matrix Double -- m :: Matrix Int -> Matrix Double
...@@ -204,7 +204,7 @@ logDistributional' o n m' = trace ("logDistributional'") result ...@@ -204,7 +204,7 @@ logDistributional' o n m' = trace ("logDistributional'") result
-- m_{i,j} = 0 if n_{i,j} = 0 or i = j, -- m_{i,j} = 0 if n_{i,j} = 0 or i = j,
-- m_{i,j} = log(to * n_{i,j} / s_{i,j}) otherwise. -- m_{i,j} = log(to * n_{i,j} / s_{i,j}) otherwise.
mi = (.*) (matrixEye n) mi = (.*) (matrixEye n)
(map (lift1 (\x -> let x' = o + x * to in cond (x' < 1) 0 (log x'))) ((./) m ss)) (map (lift1 (\x -> let x' = x * to in cond (x' < 1) 0 (log x'))) ((./) m ss))
-- mi_nnz :: Int -- mi_nnz :: Int
-- mi_nnz = flip indexArray Z . run $ -- mi_nnz = flip indexArray Z . run $
-- foldAll (+) 0 $ map (\a -> ifThenElse (abs a < 10^(-6 :: Exp Int)) 0 1) mi -- foldAll (+) 0 $ map (\a -> ifThenElse (abs a < 10^(-6 :: Exp Int)) 0 1) mi
......
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