Initial commit of LinearRegression class

This commit is contained in:
Ziver Koc 2018-03-27 16:39:14 +02:00
parent 3c8c692b16
commit 8050170ee3
5 changed files with 306 additions and 80 deletions

View file

@ -0,0 +1,57 @@
package zutil.benchmark;
import com.carrotsearch.junitbenchmarks.BenchmarkRule;
import org.junit.Rule;
import org.junit.Test;
public class AnonymousFunctionBenchmark {
public static final int TEST_EXECUTIONS = 500;
@Rule
public BenchmarkRule benchmarkRun = new BenchmarkRule();
private int[] array = new int[100_000];
@Test
public void functionLoop() {
for(int k=0; k<TEST_EXECUTIONS; k++) {
for (int i = 0; i < array.length; i++) {
array[i] = new CalcFunc(){
public int calc(int i){
return i+1;
}
}.calc(i);
}
}
}
@Test
public void preFunctionLoop() {
CalcFunc func = new CalcFunc(){
public int calc(int i){
return i+1;
}
};
for(int k=0; k<TEST_EXECUTIONS; k++) {
for (int i = 0; i < array.length; i++) {
array[i] = func.calc(i);
}
}
}
@Test
public void rawLoops(){
for(int k=0; k<TEST_EXECUTIONS; k++) {
for (int i = 0; i < array.length; i++) {
array[i] = i;
}
}
}
private interface CalcFunc{
int calc(int i);
}
}

View file

@ -11,30 +11,51 @@ public class LoopBenchmark {
public BenchmarkRule benchmarkRun = new BenchmarkRule();
private int[] matrix = new int[100_000];
private int[] matrix2 = new int[50_000];
private int[] array1 = new int[100_000];
private int[] array2 = new int[50_000];
@Test
public void oneLoop() {
public void writeArrayOneLoop() {
for(int k=0; k<TEST_EXECUTIONS; k++) {
for (int i = 0; i < Math.max(matrix.length, matrix.length); i++) {
if (i < matrix.length)
matrix[i] = i;
if (i < matrix2.length)
matrix2[i] = i;
for (int i = 0; i < Math.max(array1.length, array1.length); i++) {
if (i < array1.length)
array1[i] = i;
if (i < array2.length)
array2[i] = i;
}
}
}
@Test
public void twoLoops(){
public void writeArraySeparateLoops(){
for(int k=0; k<TEST_EXECUTIONS; k++) {
for (int i = 0; i < matrix.length; i++) {
matrix[i] = i;
for (int i = 0; i < array1.length; i++) {
array1[i] = i;
}
for (int j = 0; j < matrix2.length; j++) {
matrix2[j] = j;
for (int j = 0; j < array2.length; j++) {
array2[j] = j;
}
}
}
@Test
public void readArrayLoop() {
int sum = 0;
for(int k=0; k<TEST_EXECUTIONS; k++) {
for (int i = 0; i < array1.length; i++) {
sum += array1[i];
}
}
}
@Test
public void readArrayForeach() {
int sum = 0;
for(int k=0; k<TEST_EXECUTIONS; k++) {
for (int i : array1) {
sum += array1[i];
}
}
}

View file

@ -7,30 +7,30 @@ import static org.junit.Assert.*;
/**
*
*/
public class MatrixMathTest {
public class MatrixTest {
@Test
public void scalarAdd(){
assertArrayEquals(new double[][]{{4,5},{-2,11}},
MatrixMath.add(new double[][]{{2,3},{-4,9}}, 2));
Matrix.add(new double[][]{{2,3},{-4,9}}, 2));
}
@Test
public void scalarSubtraction(){
assertArrayEquals(new double[][]{{0,1},{-6,7}},
MatrixMath.subtract(new double[][]{{2,3},{-4,9}}, 2));
Matrix.subtract(new double[][]{{2,3},{-4,9}}, 2));
}
@Test
public void scalarMultiply(){
assertArrayEquals(new double[][]{{4,6},{-8,18}},
MatrixMath.multiply(new double[][]{{2,3},{-4,9}}, 2));
Matrix.multiply(new double[][]{{2,3},{-4,9}}, 2));
}
@Test
public void scalarDivision(){
assertArrayEquals(new double[][]{{1,2},{-2,5}},
MatrixMath.divide(new double[][]{{2,4},{-4,10}}, 2));
Matrix.divide(new double[][]{{2,4},{-4,10}}, 2));
}
@ -38,19 +38,33 @@ public class MatrixMathTest {
@Test
public void elementalAdd(){
assertArrayEquals(new double[][]{{3,5},{-1,13}},
MatrixMath.add(new double[][]{{2,3},{-4,9}}, new double[][]{{1,2},{3,4}}));
Matrix.Elemental.add(new double[][]{{2,3},{-4,9}}, new double[][]{{1,2},{3,4}}));
}
@Test
public void elementalSubtract(){
assertArrayEquals(new double[][]{{1,1},{-7,5}},
MatrixMath.subtract(new double[][]{{2,3},{-4,9}}, new double[][]{{1,2},{3,4}}));
Matrix.Elemental.subtract(new double[][]{{2,3},{-4,9}}, new double[][]{{1,2},{3,4}}));
}
@Test
public void elementalMultiply(){
assertArrayEquals(new double[][]{{2,6},{-12,36}},
MatrixMath.elemMultiply(new double[][]{{2,3},{-4,9}}, new double[][]{{1,2},{3,4}}));
Matrix.Elemental.multiply(new double[][]{{2,3},{-4,9}}, new double[][]{{1,2},{3,4}}));
}
@Test
public void elementalVectorPow(){
assertArrayEquals(
new double[]{4,9,16,81},
Matrix.Elemental.pow(new double[]{2,3,-4,9}, 2),
0.0);
}
@Test
public void elementalMatrixPow(){
assertArrayEquals(new double[][]{{4,9},{16,81}},
Matrix.Elemental.pow(new double[][]{{2,3},{-4,9}}, 2));
}
@ -59,7 +73,7 @@ public class MatrixMathTest {
public void vectorMultiply(){
assertArrayEquals(
new double[]{8,14},
MatrixMath.multiply(new double[][]{{2,3},{-4,9}}, new double[]{1,2}),
Matrix.multiply(new double[][]{{2,3},{-4,9}}, new double[]{1,2}),
0.0
);
}
@ -68,18 +82,27 @@ public class MatrixMathTest {
public void vectorDivision(){
assertArrayEquals(
new double[]{4,1},
MatrixMath.divide(new double[][]{{2,4},{-4,10}}, new double[]{1,2}),
Matrix.divide(new double[][]{{2,4},{-4,10}}, new double[]{1,2}),
0.0
);
}
@Test
public void vectorSum(){
assertEquals(
20.0,
Matrix.sum(new double[]{1,2,0,3,5,9}),
0.02
);
}
@Test
public void matrixMultiply(){
assertArrayEquals(
new double[][]{{486,410.4,691.6},{314,341.6,416.4},{343.5,353.4,463.6},{173,285.2,190.8}},
MatrixMath.multiply(
Matrix.multiply(
new double[][]{{1,2104},{1,1416},{1,1534},{1,852}},
new double[][]{{-40,200,-150},{0.25,0.1,0.4}})
);
@ -89,21 +112,30 @@ public class MatrixMathTest {
public void matrixTranspose(){
assertArrayEquals(
new double[][]{{1,3},{2,5},{0,9}},
MatrixMath.transpose(
Matrix.transpose(
new double[][]{{1,2,0},{3,5,9}})
);
}
@Test
public void matrixSum(){
assertEquals(
20.0,
Matrix.sum(new double[][]{{1,2,0},{3,5,9}}),
0.02
);
}
@Test
public void identity(){
assertArrayEquals(
new double[][]{{1}},
MatrixMath.identity(1));
Matrix.identity(1));
assertArrayEquals(
new double[][]{{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}},
MatrixMath.identity(4));
Matrix.identity(4));
}
}