/*
* Copyright (C) 2015 Rogério Pontes
*
*/
package no.uib.cipr.matrix;
import org.junit.Test;
/**
* Test of the Khatri Rao Multiplication.
*/
public class KhatriRaoTest {
@Test
public void testEqualSizeKhatriRao() {
Matrix A = new DenseMatrix(new double[][]{{1, 2, 3}, {4, 5, 6},
{7, 8, 9}});
Matrix B = new DenseMatrix(new double[][]{{1, 4, 7}, {2, 5, 8},
{3, 6, 9}});
Matrix res = new DenseMatrix(new double[][]{{1, 8, 21}, {2, 10, 24},
{3, 12, 27}, {4, 20, 42}, {8, 25, 48}, {12, 30, 54},
{7, 32, 63}, {14, 40, 72}, {21, 48, 81}});
KR mult = new KR(A, B);
Matrix C = new DenseMatrix(A.numRows() * B.numRows(), A.numColumns());
C = mult.multiply(C);
MatrixTestAbstract.assertMatrixEquals(C, res);
}
@Test
public void testEqualColumnKhatriRao() {
Matrix A = new DenseMatrix(new double[][]{{1, 2}, {4, 2}, {7, 8}});
Matrix B = new DenseMatrix(new double[][]{{1, 4}, {8, 5}, {5, 4},
{10, 20}, {30, 40}});
Matrix res = new DenseMatrix(new double[][]{{1, 8}, {8, 10}, {5, 8},
{10, 40}, {30, 80}, {4, 8}, {32, 10}, {20, 8}, {40, 40},
{120, 80}, {7, 32}, {56, 40}, {35, 32}, {70, 160}, {210, 320}});
KR mult = new KR(A, B);
Matrix C = new DenseMatrix(A.numRows() * B.numRows(), A.numColumns());
C = mult.multiply(C);
MatrixTestAbstract.assertMatrixEquals(C, res);
}
@Test
public void testEqualRowKhatriRao() {
Matrix A = new DenseMatrix(new double[][]{{1, 2, 4, 5, 6},
{2, 8, 9, 2, 3}});
Matrix B = new DenseMatrix(new double[][]{{10, 20, 6, 12, 10},
{20, 5, 6, 7, 10}});
Matrix res = new DenseMatrix(new double[][]{{10, 40, 24, 60, 60},
{20, 10, 24, 35, 60}, {20, 160, 54, 24, 30},
{40, 40, 54, 14, 30}});
KR mult = new KR(A, B);
Matrix C = new DenseMatrix(A.numRows() * B.numRows(), A.numColumns());
C = mult.multiply(C);
MatrixTestAbstract.assertMatrixEquals(C, res);
}
}