EuclideanDistance extends FastDistance { @Override public double calc(double[] array1, double[] array2) { double s = 0.; for (int i = 0; i < array1.length; i++) { double d = array1[i] - array2[i]; s += d * d; } return Math.sqrt(s); }  @Override double calc(double[] array1, double[] array2); @Override double calc(Vector vec1, Vector vec2); @Override void updateLabel(FastDistanceData data);  }
@Test public void testContinuousDistance() { Assert.assertEquals(distance.calc(denseVector1, denseVector2), 6.0, 0.01); Assert.assertEquals(distance.calc(denseVector1.getData(), denseVector2.getData()), 6.0, 0.01); Assert.assertEquals(distance.calc(denseVector1, sparseVector1), 5.47, 0.01); Assert.assertEquals(distance.calc(sparseVector1, sparseVector2), 0.50, 0.01); Assert.assertEquals(distance.calc(sparseVector1, denseVector2), 8.38, 0.01); }
@Test public void testCalDistanceVecVec(){ DenseMatrix denseResult = distance.calc(distance.prepareVectorData(Tuple2.of(denseVector1, null)), (FastDistanceData)distance.prepareVectorData(Tuple2.of( denseVector2, null))); Assert.assertEquals(denseResult.get(0, 0), 6.0, 0.01); DenseMatrix sparseResult = distance.calc(distance.prepareVectorData(Tuple2.of(sparseVector1, null)), (FastDistanceData)distance.prepareVectorData(Tuple2.of( sparseVector2, null))); Assert.assertEquals(sparseResult.get(0, 0), 0.5, 0.01); }
@Test public void testCalDistanceMatrixMatrix() { FastDistanceMatrixData matrixData = initMatrixData(); DenseMatrix res = distance.calc(matrixData, matrixData); double[] expect = new double[] {0.0, 6.0, 6.0, 0.0}; double[] predict = res.getData(); for (int i = 0; i < expect.length; i++) { Assert.assertEquals(expect[i], predict[i], 0.01); } }
@Test public void testCalDistanceVecMatrix(){ FastDistanceMatrixData matrixData = initMatrixData(); FastDistanceVectorData vectorData = distance.prepareVectorData(Row.of(0, sparseVector1), 1); double[] predict = distance.calc(matrixData, vectorData).getData(); double[] expect = new double[]{5.47, 8.38}; for(int i = 0; i < expect.length; i++){ Assert.assertEquals(expect[i], predict[i], 0.01); } predict = distance.calc(vectorData, matrixData).getData(); for(int i = 0; i < expect.length; i++){ Assert.assertEquals(expect[i], predict[i], 0.01); } }