@Override public SpatialClusters<?> create(byte[][] data) { if (this.precision == Precision.BYTE) { final KMeansConfiguration<ByteNearestNeighbours, byte[]> kmc = new KMeansConfiguration<ByteNearestNeighbours, byte[]>(); if (exactMode) { kmc.setNearestNeighbourFactory(new ByteNearestNeighboursExact.Factory()); } else { kmc.setNearestNeighbourFactory(new ByteNearestNeighboursKDTree.Factory()); } final HierarchicalByteKMeans tree = new HierarchicalByteKMeans(kmc, data[0].length, K, depth); System.err.printf("Building vocabulary tree\n"); return tree.cluster(data); } else { final KMeansConfiguration<IntNearestNeighbours, int[]> kmc = new KMeansConfiguration<IntNearestNeighbours, int[]>(); if (exactMode) { kmc.setNearestNeighbourFactory(new IntNearestNeighboursExact.Factory()); } else { kmc.setNearestNeighbourFactory(new IntNearestNeighboursKDTree.Factory()); } final HierarchicalIntKMeans tree = new HierarchicalIntKMeans(kmc, data[0].length, K, depth); System.err.printf("Building vocabulary tree\n"); return tree.cluster(ByteArrayConverter.byteToInt(data)); } }