Index: lutinmatrix/src/java/org/codelutin/math/matrix/AbstractMatrixND.java diff -u lutinmatrix/src/java/org/codelutin/math/matrix/AbstractMatrixND.java:1.19 lutinmatrix/src/java/org/codelutin/math/matrix/AbstractMatrixND.java:1.20 --- lutinmatrix/src/java/org/codelutin/math/matrix/AbstractMatrixND.java:1.19 Mon Apr 2 10:51:44 2007 +++ lutinmatrix/src/java/org/codelutin/math/matrix/AbstractMatrixND.java Wed Oct 10 15:56:11 2007 @@ -23,9 +23,9 @@ * Created: 29 oct. 2004 * * @author Benjamin Poussin - * @version $Revision: 1.19 $ + * @version $Revision: 1.20 $ * - * Mise a jour: $Date: 2007/04/02 10:51:44 $ + * Mise a jour: $Date: 2007/10/10 15:56:11 $ * par : $Author: bpoussin $ */ @@ -417,6 +417,17 @@ return result; } + /* (non-Javadoc) + * @see org.codelutin.math.matrix.MatrixND#sumAll() + */ + public double sumAll() { + double result = 0; + for(MatrixIterator i=iterator(); i.next();){ + result += i.getValue(); + } + return result; + } + public MatrixND sumOverDim(int dim){ return sumOverDim(dim, getDim(dim)); } @@ -629,6 +640,35 @@ return reduce(1); } + public MatrixND reduceDims(int ... dims) { + Arrays.sort(dims); + // tableau permettant de faire la correspondance entre les dimensions + // de la matrice actuelle et les dimentsions de la nouvelle matrice + // l'element i du tableau qui correcpond à la dimensions i de la + // nouvelle matrice contient la dimension equivalente dans + // la matrice actuelle + int [] correspondance = new int[getNbDim()]; + // les nouvelles semantiques + List sem = new ArrayList(); + // les nouveaux noms de dimensions + List dimName = new ArrayList(); + // il faut au moins une dimension pour la matrice + int minNbDim = 1; + for (int j=getNbDim()-1; j>=0 ; j--){ + // si la dimension à plus d'un élément ou qu'il n'est pas dans dims + // on garde la dimension + if (getDim(j) > 1 || Arrays.binarySearch(dims, j) < 0 || j < minNbDim){ + // on ne conserve que les dimensions supérieure à 1 + correspondance[sem.size()] = j; + sem.add(getSemantics(j)); + dimName.add(getDimensionName(j)); + minNbDim--; + } + } + MatrixND result = reduce(dimName, sem, correspondance); + return result; + } + public MatrixND reduce(int minNbDim){ // tableau permettant de faire la correspondance entre les dimensions // de la matrice actuelle et les dimentsions de la nouvelle matrice @@ -653,6 +693,19 @@ } } + MatrixND result = reduce(dimName, sem, correspondance); + return result; + } + + /** + * Create new matrice from the current matrix. + * @param dimName dimension name for new matrix + * @param sem semantic for new matrix + * @param correspondance array to do the link between current matrix and + * returned matrix + * @return new matrix + */ + protected MatrixND reduce(List dimName, List sem, int [] correspondance) { // on converti les listes en tableau en inversant l'ordre car on // a fait un parcours en sens inverse int nbDim = sem.size(); @@ -679,7 +732,7 @@ } return result; } - + public MatrixND mult(MatrixND m)throws MatrixException{ if(this.getNbDim()>2 || m.getNbDim()>2){ throw new MatrixException("La multiplication de matrice n'est pas applicable aux matrices de plus de 2 dimensions"); Index: lutinmatrix/src/java/org/codelutin/math/matrix/MatrixND.java diff -u lutinmatrix/src/java/org/codelutin/math/matrix/MatrixND.java:1.12 lutinmatrix/src/java/org/codelutin/math/matrix/MatrixND.java:1.13 --- lutinmatrix/src/java/org/codelutin/math/matrix/MatrixND.java:1.12 Mon Apr 2 10:51:44 2007 +++ lutinmatrix/src/java/org/codelutin/math/matrix/MatrixND.java Wed Oct 10 15:56:11 2007 @@ -23,9 +23,9 @@ * Created: 29 oct. 2004 * * @author Benjamin Poussin -* @version $Revision: 1.12 $ +* @version $Revision: 1.13 $ * -* Mise a jour: $Date: 2007/04/02 10:51:44 $ +* Mise a jour: $Date: 2007/10/10 15:56:11 $ * par : $Author: bpoussin $ */ @@ -243,6 +243,10 @@ // */ // public boolean dimValid(int [] dim); + /** + * Somme toutes les valeurs de la matrice + */ + public double sumAll(); /** * Somme la matrice sur une dimension donnée. La matrice résultat à le @@ -472,6 +476,15 @@ public MatrixND reduce(int minNbDim); /** + * Reduit le matrice seulement sur les dimensions passées en argument. Si + * une des dimensions passées en arguement n'a pas un seul élément, cette + * dimension n'est pas prise en compte. + * @param dims les dimensions sur lequel il faut faire la reduction + * @return une nouvelle matrice + */ + public MatrixND reduceDims(int ... dims); + + /** * Multiplication normal de 2 matrices 2D. Retourne une nouvelle matrice */ public MatrixND mult(MatrixND m); Index: lutinmatrix/src/java/org/codelutin/math/matrix/MatrixNDImpl.java diff -u lutinmatrix/src/java/org/codelutin/math/matrix/MatrixNDImpl.java:1.7 lutinmatrix/src/java/org/codelutin/math/matrix/MatrixNDImpl.java:1.8 --- lutinmatrix/src/java/org/codelutin/math/matrix/MatrixNDImpl.java:1.7 Mon Apr 2 10:51:44 2007 +++ lutinmatrix/src/java/org/codelutin/math/matrix/MatrixNDImpl.java Wed Oct 10 15:56:11 2007 @@ -23,9 +23,9 @@ * Created: 29 oct. 2004 * * @author Benjamin Poussin -* @version $Revision: 1.7 $ +* @version $Revision: 1.8 $ * -* Mise a jour: $Date: 2007/04/02 10:51:44 $ +* Mise a jour: $Date: 2007/10/10 15:56:11 $ * par : $Author: bpoussin $ */ @@ -99,6 +99,7 @@ * Si le vector utilise par la BasicMatix supporte la method map, * on l'utilise pour gagner du temps */ + @Override public MatrixND map(MapFunction f){ if (matrix.data.isImplementedMap()) { matrix.data.map(f);