@Override public double[][] getKernelMatrix(List<TrainingSample<T>> list) { final List<TrainingSample<T>> l = list; // init matrix with ones double matrix[][] = new double[l.size()][l.size()]; for (double[] lines : matrix) Arrays.fill(lines, 1.); for (final GaussianKernel<T> k : kernels.keySet()) { final double w = kernels.get(k); // check w if (w == 0) continue; k.setGamma(w); final double[][] m = k.getKernelMatrix(l); // specific factory ThreadedMatrixOperator tmo = new ThreadedMatrixOperator() { @Override public void doLines(double[][] matrix, int from, int to) { for (int index = from; index < to; index++) { for (int i = 0; i < m[index].length; i++) { matrix[index][i] *= m[index][i]; } } }; }; matrix = tmo.getMatrix(matrix); } return matrix; }