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
import qualified Data.Text as Text
------------------------------------------------------------------------
data Similarity = Conditional | Distributional_A | Distributional_B
data Similarity = Conditional | Distributional
deriving (Show, Eq)
measure :: Similarity -> Matrix Int -> Matrix Double
measure Conditional x = measureConditional x
measure Distributional_A x = logDistributional2 1 x
measure Distributional_B x = logDistributional2 0 x
measure Conditional x = measureConditional x
measure Distributional x = logDistributional2 x
------------------------------------------------------------------------
withMetric :: GraphMetric -> Similarity
withMetric Order1 = Conditional
withMetric Order2_A = Distributional_A
withMetric _ = Distributional_B
withMetric Order1 = Conditional
withMetric _ = Distributional
------------------------------------------------------------------------
-- Order2 type is for keeping Database json compatibility
......
......@@ -168,16 +168,16 @@ distributional m' = run $ result
result = termDivNan z_1 z_2
logDistributional2 :: Exp Double -> Matrix Int -> Matrix Double
logDistributional2 o m = trace ("logDistributional2, dim=" `mappend` show n) . run
$ diagNull n
$ matMaxMini
$ logDistributional' o n m
logDistributional2 :: Matrix Int -> Matrix Double
logDistributional2 m = trace ("logDistributional2, dim=" `mappend` show n) . run
$ diagNull n
$ matMaxMini
$ logDistributional' n m
where
n = dim m
logDistributional' :: Exp Double -> Int -> Matrix Int -> Acc (Matrix Double)
logDistributional' o n m' = trace ("logDistributional'") result
logDistributional' :: Int -> Matrix Int -> Acc (Matrix Double)
logDistributional' n m' = trace ("logDistributional'") result
where
-- From Matrix Int to Matrix Double, i.e :
-- m :: Matrix Int -> Matrix Double
......@@ -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} = log(to * n_{i,j} / s_{i,j}) otherwise.
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 = flip indexArray Z . run $
-- 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