Skip to content

Commit dfd6a1d

Browse files
committed
add Divide by Column Sums Normalization (default for Aras)
1 parent b2af3b7 commit dfd6a1d

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/main/scala/normalization.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,12 @@ object Normalization:
1313
val (n, m) = Matrix.size(decmat)
1414
val columnnorms = Matrix.applyFunctionToColumns(decmat, Matrix.norm)
1515
Array.tabulate(n, m)((i, j) => decmat(i)(j) / columnnorms(j))
16+
17+
def DivideByColumnnsSumNormalization(
18+
decmat: Mat,
19+
weights: Vec,
20+
directions: Array[Direction]
21+
): Mat =
22+
val (n, m) = Matrix.size(decmat)
23+
val columnsums = Matrix.colsums(decmat)
24+
Array.tabulate(n, m)((i, j) => decmat(i)(j) / columnsums(j))

src/test/scala/testnormalization.scala

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import munit.Assertions as A
22

33
import scala.math as math
44
import org.expr.mcdm.Matrix
5+
import org.expr.mcdm.Direction._
6+
import org.expr.mcdm.Normalization._
57

68
class TestNormalizations extends munit.FunSuite {
79

@@ -17,5 +19,26 @@ class TestNormalizations extends munit.FunSuite {
1719
)
1820
A.assert(Matrix.elementwise_equal(columnnorms, expected))
1921
}
22+
test("Divide By Columns Sum Normalization"){
23+
val decmat = Array(
24+
Array(0.616812, 0.415094 , 0.0168757, 0.338965 , 0.190954),
25+
Array(0.938958, 0.363936 , 0.528116 , 0.739575 , 0.669537),
26+
Array(0.816357, 0.538917 , 0.306811 , 0.356321 , 0.380972),
27+
Array(0.874629, 0.0295879, 0.340564 , 0.0345955, 0.291483))
28+
29+
val weights = Array(0.2, 0.2, 0.2, 0.2, 0.2)
30+
31+
val directions = Array(Maximize, Maximize, Minimize, Minimize, Maximize)
32+
33+
val normalizedMatrix = DivideByColumnnsSumNormalization(decmat, weights, directions)
34+
35+
val expected = Array(
36+
Array(0.189978, 0.30804 , 0.0141531, 0.230674 , 0.124567),
37+
Array(0.289199, 0.270075, 0.442914 , 0.503298 , 0.436765),
38+
Array(0.251438, 0.399928, 0.257313 , 0.242485 , 0.248523),
39+
Array(0.269385, 0.021957, 0.28562 , 0.0235431, 0.190145))
40+
41+
A.assert(Matrix.elementwise_equal(normalizedMatrix, expected, 1e-5))
42+
}
2043

2144
}

0 commit comments

Comments
 (0)