# KMatrix

A simple matrix implementation for kotlin using Kotlin DSL

# Usage

##### Creating a matrix

```val matrix = Matrix {
row(1, 2, 3)
row(4, 5, 6)
row(7, 8, 9)
}```
##### Get matrix dimensions size

```val matrix = Matrix {
row(2, 4)
row(8, 10)
row(9, 22)
}
val rowSize = matrix.rowSize
val columnSize = matrix.columnSize
println("\$rowSize * \$columnSize matrix")```
``````3 * 2 matrix
``````
##### Get a matrix element
`val element = matrix[1, 2]`
##### Get a matrix row elements
`val row = matrix.getRow(0)`
##### Get a matrix column elements
`val column = matrix.getColumn(0)`
##### Multiplay two matrices

```val scale = Matrix {
row(5, 0, 0)
row(0, 5, 0)
row(0, 0, 5)
}
val point = Matrix {
row(10)
row(7)
row(2)
}
val result = scale * point
println(result)```

``````┌──────┐
│ 50.0 │
├──────┤
│ 35.0 │
├──────┤
│ 10.0 │
└──────┘
``````

```val matrix1 = Matrix {
row(1, 2, 3)
row(4, 5, 6)
row(7, 8, 9)
}
val matrix2 = Matrix {
row(1, 2, 3)
row(4, 5, 6)
row(7, 8, 9)
}
val result = matrix1 + matrix2
println(result)```

``````┌──────┬──────┬──────┐
│ 2.0  │ 4.0  │ 6.0  │
├──────┼──────┼──────┤
│ 8.0  │ 10.0 │ 12.0 │
├──────┼──────┼──────┤
│ 14.0 │ 16.0 │ 18.0 │
└──────┴──────┴──────┘
``````
##### Subtract two matrices

```val matrix1 = Matrix {
row(2, 4, 6)
row(8, 10, 12)
row(14, 16, 18)
}
val matrix2 = Matrix {
row(1, 2, 3)
row(4, 5, 6)
row(7, 8, 9)
}
val result = matrix1 - matrix2
println(result)```

``````┌─────┬─────┬─────┐
│ 1.0 │ 2.0 │ 3.0 │
├─────┼─────┼─────┤
│ 4.0 │ 5.0 │ 6.0 │
├─────┼─────┼─────┤
│ 7.0 │ 8.0 │ 9.0 │
└─────┴─────┴─────┘
``````
##### Get the transpose of a matrix

```val matrix = Matrix {
row(2, 4)
row(8, 10)
}
val transposed = matrix.transpose()
println(transposed)```

``````┌─────┬──────┐
│ 2.0 │ 8.0  │
├─────┼──────┤
│ 4.0 │ 10.0 │
└─────┴──────┘
``````
##### Mapping a matrix

```val matrix = Matrix {
row(2, 4, 6)
row(8, 10, 12)
row(14, 16, 18)
}
val newMatrix = matrix.map {
it/2
}
println(newMatrix)```

``````┌─────┬─────┬─────┐
│ 1.0 │ 2.0 │ 3.0 │
├─────┼─────┼─────┤
│ 4.0 │ 5.0 │ 6.0 │
├─────┼─────┼─────┤
│ 7.0 │ 8.0 │ 9.0 │
└─────┴─────┴─────┘
``````
##### Get the element’s first indexes

```val matrix = Matrix {
row(2, 4, 6)
row(8, 10, 12)
row(14, 16, 18)
}
val index = matrix.indexOf(2.0)
println(index)```
``````(0, 0)
``````
##### Get the element’s last indexes

```val matrix = Matrix {
row(2, 4, 6)
row(8, 10, 12)
row(14, 16, 2)
}
val index = matrix.lastIndexOf(2.0)
println(index)```
``````(2, 2)
``````
##### Iterate on a matrix

Using forEach

```val matrix = Matrix {
row(2, 4)
row(8, 10)
}
matrix.forEach {
println(it)
}```

``````2.0
4.0
8.0
10.0
``````

Using forEachIndexed

```val matrix = Matrix {
row(2, 4)
row(8, 10)
}
matrix.forEachIndexed { x, y, d ->
println("(\$x, \$y) = \$d")
}```

``````(0, 0) = 2.0
(1, 0) = 4.0
(0, 1) = 8.0
(1, 1) = 10.0
``````
##### Convert matrix to list

```val matrix = Matrix {
row(2, 4)
row(8, 10)
}
val list = matrix.toList()
println(list)```
``````[2.0, 4.0, 8.0, 10.0]
``````
##### Get the matrix elements sum

```val matrix = Matrix {
row(2, 4, 6)
row(8, 10, 12)
row(14, 16, 2)
}
val sum = matrix.sum()```
##### Check if the matrix contains a value

```val matrix = Matrix {
row(2, 4, 6)
row(8, 10, 12)
row(14, 16, 2)
}
val flag = matrix.contains(4)```
##### Check if the matrix contains a list of values

```val matrix = Matrix {
row(2, 4, 6)
row(8, 10, 12)
row(14, 16, 2)
}
val flag = matrix.containsAll(listOf(2, 4, 10))```

? Working on it ?

``````   Copyright 2022 mhssn

you may not use this file except in compliance with the License.
You may obtain a copy of the License at