Hi Ted, I'm sorry it took so long, but I remember our discussion about Mahout Math's API uses in Carrot2. Adding to what Staszek already said about the requirement of being able to do in-place computations on matrices, I decided to get all the actual API calls we currently use. I wrote an AspectJ aspect and processed the binaries our of curiosity. Seems like we're using the following:
generic stuff: org.apache.mahout.math.Arrays.trimToCapacity(double[], int)) org.apache.mahout.math.function.DoubleComparator.compare(double, double)) org.apache.mahout.math.function.DoubleFunction.apply(double)) org.apache.mahout.math.function.Functions.chain(org.apache.mahout.math.function.UnaryFunction, org.apache.mahout.math.function.BinaryFunction)) org.apache.mahout.math.function.Functions.mult(double)) org.apache.mahout.math.function.Functions.plus(double)) org.apache.mahout.math.function.Functions.swapArgs(org.apache.mahout.math.function.BinaryFunction)) org.apache.mahout.math.function.Mult.div(double)) org.apache.mahout.math.GenericPermuting.permute(int[], int[])) org.apache.mahout.math.list.DoubleArrayList.get(int)) org.apache.mahout.math.list.DoubleArrayList.<init>(int)) org.apache.mahout.math.list.DoubleArrayList.size()) org.apache.mahout.math.list.IntArrayList.get(int)) org.apache.mahout.math.list.IntArrayList.<init>(int)) This one most likely replaceable: org.apache.mahout.math.matrix.doublealgo.Sorting.sort(org.apache.mahout.math.matrix.DoubleMatrix2D, double[])) And matrices: org.apache.mahout.math.matrix.DoubleFactory2D.make(int, int)) org.apache.mahout.math.matrix.DoubleMatrix1D.aggregate(org.apache.mahout.math.function.BinaryFunction, org.apache.mahout.math.function.UnaryFunction)) org.apache.mahout.math.matrix.DoubleMatrix1D.assign(double)) org.apache.mahout.math.matrix.DoubleMatrix1D.assign(org.apache.mahout.math.function.UnaryFunction)) org.apache.mahout.math.matrix.DoubleMatrix1D.assign(org.apache.mahout.math.matrix.DoubleMatrix1D, org.apache.mahout.math.function.BinaryFunction)) org.apache.mahout.math.matrix.DoubleMatrix1D.toArray()) org.apache.mahout.math.matrix.DoubleMatrix2D.assign(double)) org.apache.mahout.math.matrix.DoubleMatrix2D.assign(org.apache.mahout.math.function.UnaryFunction)) org.apache.mahout.math.matrix.DoubleMatrix2D.assign(org.apache.mahout.math.matrix.DoubleMatrix2D)) org.apache.mahout.math.matrix.DoubleMatrix2D.assign(org.apache.mahout.math.matrix.DoubleMatrix2D, org.apache.mahout.math.function.BinaryFunction)) org.apache.mahout.math.matrix.DoubleMatrix2D.cardinality()) org.apache.mahout.math.matrix.DoubleMatrix2D.columns()) org.apache.mahout.math.matrix.DoubleMatrix2D.copy()) org.apache.mahout.math.matrix.DoubleMatrix2D.getNonZeros(org.apache.mahout.math.list.IntArrayList, org.apache.mahout.math.list.IntArrayList, org.apache.mahout.math.list.DoubleArrayList)) org.apache.mahout.math.matrix.DoubleMatrix2D.getQuick(int, int)) org.apache.mahout.math.matrix.DoubleMatrix2D.rows()) org.apache.mahout.math.matrix.DoubleMatrix2D.set(int, int, double)) org.apache.mahout.math.matrix.DoubleMatrix2D.setQuick(int, int, double)) org.apache.mahout.math.matrix.DoubleMatrix2D.toStringShort()) org.apache.mahout.math.matrix.DoubleMatrix2D.viewColumn(int)) org.apache.mahout.math.matrix.DoubleMatrix2D.viewDice()) org.apache.mahout.math.matrix.DoubleMatrix2D.viewPart(int, int, int, int)) org.apache.mahout.math.matrix.DoubleMatrix2D.viewRow(int)) org.apache.mahout.math.matrix.DoubleMatrix2D.viewSelection(int[], int[])) org.apache.mahout.math.matrix.DoubleMatrix2D.zMult(org.apache.mahout.math.matrix.DoubleMatrix2D, org.apache.mahout.math.matrix.DoubleMatrix2D)) org.apache.mahout.math.matrix.DoubleMatrix2D.zMult(org.apache.mahout.math.matrix.DoubleMatrix2D, org.apache.mahout.math.matrix.DoubleMatrix2D, double, double, boolean, boolean)) org.apache.mahout.math.matrix.impl.DenseDoubleMatrix2D.assign(org.apache.mahout.math.matrix.DoubleMatrix2D)) org.apache.mahout.math.matrix.impl.SparseDoubleMatrix2D.<init>(int, int)) Linear algebra: org.apache.mahout.math.matrix.linalg.Algebra.normF(org.apache.mahout.math.matrix.DoubleMatrix2D)) org.apache.mahout.math.matrix.linalg.EigenvalueDecomposition.getRealEigenvalues()) org.apache.mahout.math.matrix.linalg.EigenvalueDecomposition.<init>(org.apache.mahout.math.matrix.DoubleMatrix2D)) org.apache.mahout.math.matrix.linalg.SingularValueDecomposition.getSingularValues()) org.apache.mahout.math.matrix.linalg.SingularValueDecomposition.getU()) org.apache.mahout.math.matrix.linalg.SingularValueDecomposition.getV()) org.apache.mahout.math.matrix.linalg.SingularValueDecomposition.<init>(org.apache.mahout.math.matrix.DoubleMatrix2D)) And that would be it. Don't know how much this helps, but wanted to leave a trace so that we can reflect on it later, if needed. Dawid
