/* * Save in "ancient" text format. Extremely inefficient for large files. Keeping this for documentation purposes only. */ private void saveDistanceMatrix() throws IOException { PrintWriter out = new PrintWriter(new BufferedOutputStream(new FileOutputStream(distFile))); for (int i = 0; i < fv.length; i++) { for (int j = 0; j < fv.length; j++) { float distance = (i == j ? 0f : distMeasure.squaredDistance(fv[i], fv[j])); out.printf(Locale.US, "%.1f ", distance); } out.print("\n"); } out.flush(); out.close(); }
@Test(expected = IllegalArgumentException.class) public void testVectorDistance() { DistanceMeasure distanceMeasure = new CosineDistanceMeasure(); Vector v1 = new Vector(); Vector v2 = new Vector(); v1.add(Real.valueOf(4.0)); v1.add(Real.valueOf(3.0)); v1.add(Real.valueOf(2.0)); v2.add(Real.valueOf(2.0)); v2.add(Real.valueOf(3.0)); v2.add(Real.valueOf(4.0)); double distance = distanceMeasure.distance(v1, v2); assertTrue(distance >= -1 && distance <= 1); assertEquals(1 - (25.0 / 29.0), distance, 0.000000000000001); v1.add(Real.valueOf(22.0)); distanceMeasure.distance(v1, v2); }
/* Save in efficient binary format. */ private void binarySaveDistanceMatrix() throws IOException { DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(distFile))); out.writeBytes("EST_File fmatrix\n"); out.writeBytes("version 1\n"); out.writeBytes("DataType binary\n"); out.writeBytes("ByteOrder BigEndian\n"); out.writeBytes("rows " + fv.length + "\n"); out.writeBytes("columns " + fv.length + "\n"); out.writeBytes("EST_Header_End\n"); for (int i = 0; i < fv.length; i++) { for (int j = 0; j < fv.length; j++) { float distance = (i == j ? 0f : distMeasure.squaredDistance(fv[i], fv[j])); out.writeFloat(distance); } } out.flush(); out.close(); }