@Override public int numDimensions() { return nn.numDimensions(); }
@Override public Boolean call() { try { int D = nno.numDimensions(); float [][] points = new float[stopRow-startRow][D]; ds.getData(startRow, stopRow, points); int [] argmins = new int[points.length]; float [] mins = new float[points.length]; nno.searchNN(points, argmins, mins); synchronized(centroids_accum){ for (int i=0; i < points.length; ++i) { int k = argmins[i]; for (int d=0; d < D; ++d) { centroids_accum[k][d] += points[i][d]; } counts[k] += 1; } } } catch(Exception e) { e.printStackTrace(); } return true; } }
final int to = nn.numDimensions(); final int K = nn.size();
final int to = nn.numDimensions(); final int K = nn.size();
protected void computeDistances(float[] fullQuery, BoundedPriorityQueue<IntFloatPair> queue, IntFloatPair wp) { final float[][] distances = new float[pq.assigners.length][]; for (int j = 0, from = 0; j < this.pq.assigners.length; j++) { final FloatNearestNeighbours nn = this.pq.assigners[j]; final int to = nn.numDimensions(); final int K = nn.size(); final float[][] qus = { Arrays.copyOfRange(fullQuery, from, from + to) }; final int[][] idx = new int[1][K]; final float[][] dst = new float[1][K]; nn.searchKNN(qus, K, idx, dst); distances[j] = new float[K]; for (int k = 0; k < K; k++) { distances[j][idx[0][k]] = dst[0][k]; } from += to; } for (int i = 0; i < data.length; i++) { wp.first = i; wp.second = 0; for (int j = 0; j < this.pq.assigners.length; j++) { final int centroid = this.data[i][j] + 128; wp.second += distances[j][centroid]; } wp = queue.offerItem(wp); } }
protected void computeDistances(float[] fullQuery, BoundedPriorityQueue<IntFloatPair> queue, IntFloatPair wp) { final float[][] distances = new float[pq.assigners.length][]; for (int j = 0, from = 0; j < this.pq.assigners.length; j++) { final FloatNearestNeighbours nn = this.pq.assigners[j]; final int to = nn.numDimensions(); final int K = nn.size(); final float[][] qus = { Arrays.copyOfRange(fullQuery, from, from + to) }; final int[][] idx = new int[1][K]; final float[][] dst = new float[1][K]; nn.searchKNN(qus, K, idx, dst); distances[j] = new float[K]; for (int k = 0; k < K; k++) { distances[j][idx[0][k]] = dst[0][k]; } from += to; } for (int i = 0; i < data.length; i++) { wp.first = i; wp.second = 0; for (int j = 0; j < this.pq.assigners.length; j++) { final int centroid = this.data[i][j] + 128; wp.second += distances[j][centroid]; } wp = queue.offerItem(wp); } }