[Lutinmatrix-commits] r119 - in lutinmatrix/trunk/src: main/java/org/codelutin/math/matrix test/java/org/codelutin/math/matrix
Author: jcouteau Date: 2009-03-03 09:07:38 +0000 (Tue, 03 Mar 2009) New Revision: 119 Modified: lutinmatrix/trunk/src/main/java/org/codelutin/math/matrix/MatrixFactory.java lutinmatrix/trunk/src/test/java/org/codelutin/math/matrix/MatrixNDTest.java Log: Adding a create(double[],int[]) method for 1D and 2D matrices. Adding tests accordingly. Modified: lutinmatrix/trunk/src/main/java/org/codelutin/math/matrix/MatrixFactory.java =================================================================== --- lutinmatrix/trunk/src/main/java/org/codelutin/math/matrix/MatrixFactory.java 2009-02-23 08:48:20 UTC (rev 118) +++ lutinmatrix/trunk/src/main/java/org/codelutin/math/matrix/MatrixFactory.java 2009-03-03 09:07:38 UTC (rev 119) @@ -45,150 +45,186 @@ */ public class MatrixFactory { // MatrixFactory - /** to use log facility, just put in your code: log.info(\"...\"); */ - static private Log log = LogFactory.getLog(MatrixFactory.class); + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(MatrixFactory.class); - static { - // on essai d'enregistrer le converter XML - try { - // Il faut le faire par pur introspection sinon l'exception - // NoClassDefFoundError est levé avant d'entrer dans le constructeur - // static :( - Class converterClass = Class - .forName("org.codelutin.math.matrix.MatrixNDXMLConverter"); - Object converter = converterClass.newInstance(); + static { + // on essai d'enregistrer le converter XML + try { + // Il faut le faire par pur introspection sinon l'exception + // NoClassDefFoundError est levé avant d'entrer dans le constructeur + // static :( + Class converterClass = Class + .forName("org.codelutin.math.matrix.MatrixNDXMLConverter"); + Object converter = converterClass.newInstance(); - Class converterFactoryClass = Class - .forName("org.codelutin.xml.XMLConverterFactory"); - Method m = converterFactoryClass.getMethod("addConverter", - Class.class, Class - .forName("org.codelutin.xml.XMLConverter")); - m.invoke(null, MatrixND.class, converter); + Class converterFactoryClass = Class + .forName("org.codelutin.xml.XMLConverterFactory"); + Method m = converterFactoryClass.getMethod("addConverter", + Class.class, Class + .forName("org.codelutin.xml.XMLConverter")); + m.invoke(null, MatrixND.class, converter); - //org.codelutin.xml.XMLConverterFactory.addConverter(MatrixND.class, - // new MatrixNDXMLConverter()); - log.info("Converter XML pour MatrixND ajoute"); + // org.codelutin.xml.XMLConverterFactory.addConverter(MatrixND.class, + // new MatrixNDXMLConverter()); + log.info("Converter XML pour MatrixND ajoute"); - // on essai d'enregistrer le converter JDBC - // le JDBC depend du XML - try { - converterClass = Class - .forName("org.codelutin.math.matrix.MatrixNDJDBCConverter"); - converter = converterClass.newInstance(); + // on essai d'enregistrer le converter JDBC + // le JDBC depend du XML + try { + converterClass = Class + .forName("org.codelutin.math.matrix.MatrixNDJDBCConverter"); + converter = converterClass.newInstance(); - converterFactoryClass = Class - .forName("org.codelutin.topia.persistence.jdbctransformer.JDBCTransformerFactory"); - m = converterFactoryClass - .getMethod( - "addConverter", - Class.class, - Class - .forName("org.codelutin.topia.persistence.jdbctransformer.JDBCTransformer")); - m.invoke(null, MatrixND.class, converter); + converterFactoryClass = Class + .forName("org.codelutin.topia.persistence.jdbctransformer.JDBCTransformerFactory"); + m = converterFactoryClass + .getMethod( + "addConverter", + Class.class, + Class + .forName("org.codelutin.topia.persistence.jdbctransformer.JDBCTransformer")); + m.invoke(null, MatrixND.class, converter); - // Class converterClass = - // org.codelutin.math.matrix.MatrixNDJDBCConverter(); - // JDBCTransformerFactory - // .addConverter(MatrixND.class, new MatrixNDJDBCConverter()); - log.info("Converter JDBC pour MatrixND ajoute"); - } catch (Throwable eee) { - log - .info("librairie topia non presente. Import/Export JDBC impossible"); - log.debug("L'exception etait", eee); - } + // Class converterClass = + // org.codelutin.math.matrix.MatrixNDJDBCConverter(); + // JDBCTransformerFactory + // .addConverter(MatrixND.class, new MatrixNDJDBCConverter()); + log.info("Converter JDBC pour MatrixND ajoute"); + } catch (Throwable eee) { + log + .info("librairie topia non presente. Import/Export JDBC impossible"); + log.debug("L'exception etait", eee); + } - } catch (Throwable eee) { - log - .info("librairie lutinxml non presente. Import/Export XML impossible"); - log.debug("L'exception etait", eee); - } + } catch (Throwable eee) { + log + .info("librairie lutinxml non presente. Import/Export XML impossible"); + log.debug("L'exception etait", eee); + } - } + } - /** Valeur par defaut si aucun type de Vector n'est donné */ - static protected Class defaultVectorClass = DoubleBigVector.class; + /** Valeur par defaut si aucun type de Vector n'est donné */ + static protected Class defaultVectorClass = DoubleBigVector.class; - protected Class vectorClass = null; + protected Class vectorClass = null; - protected MatrixFactory(Class vectorClass) { - this.vectorClass = vectorClass; - } + protected MatrixFactory(Class vectorClass) { + this.vectorClass = vectorClass; + } - static public void setDefaultVectorClass(Class vectorClass) { - defaultVectorClass = vectorClass; - } + static public void setDefaultVectorClass(Class vectorClass) { + defaultVectorClass = vectorClass; + } - static public Class getDefaultVectorClass() { - return defaultVectorClass; - } + static public Class getDefaultVectorClass() { + return defaultVectorClass; + } - /** - * Retourne une factory utilisant vectorClass comme classe de base a - * l'implantation des matrices - */ - static public MatrixFactory getInstance(Class vectorClass) { - return new MatrixFactory(vectorClass); - } + /** + * Retourne une factory utilisant vectorClass comme classe de base a + * l'implantation des matrices + */ + static public MatrixFactory getInstance(Class vectorClass) { + return new MatrixFactory(vectorClass); + } - /** - * Utilise par defaut {@link FloatBigVector} - */ - static public MatrixFactory getInstance() { - return getInstance(defaultVectorClass); - } + /** + * Utilise par defaut {@link FloatBigVector} + */ + static public MatrixFactory getInstance() { + return getInstance(defaultVectorClass); + } - public MatrixND create(int[] dim) { - return new MatrixNDImpl(this, dim); - } + public MatrixND create(int[] dim) { + return new MatrixNDImpl(this, dim); + } - public MatrixND create(List[] semantics) { - return new MatrixNDImpl(this, semantics); - } + /** + * + * @param values + * The values to fill the matrix + * @param dim + * An array representing the dimensions of the matrix + * @return a 2D matrix filled with the values, null if the dimension is more + * than 2 + */ - public MatrixND create(String name, int[] dim) { - return new MatrixNDImpl(this, name, dim); - } + public MatrixND create(double[] values, int[] dim) { - public MatrixND create(String name, int[] dim, String[] dimNames) { - return new MatrixNDImpl(this, name, dim, dimNames); - } + if (dim.length > 2) { + return null; + } + MatrixNDImpl matrix = new MatrixNDImpl(this, dim); - public MatrixND create(String name, List[] semantics) { - return new MatrixNDImpl(this, name, semantics); - } + if (dim.length == 2) { + for (int i = 0; i < dim[0]; i++) { + for (int j = 0; j < dim[1]; j++) { + int[] coordinates = {i,j}; + matrix.setValue(coordinates, values[i * dim[0] + j]); + } + } + } + if (dim.length == 1){ + for (int i=0;i<dim[0];i++) { + int[] coordinates = {i}; + matrix.setValue(coordinates, values[i]); + } + } - public MatrixND create(String name, List[] semantics, String[] dimNames) { - return new MatrixNDImpl(this, name, semantics, dimNames); - } + return matrix; + } - public MatrixND create(MatrixND matrix) { - return new MatrixNDImpl(this, matrix); - } + public MatrixND create(List[] semantics) { + return new MatrixNDImpl(this, semantics); + } - /** - * Crée une nouvelle matrice identité. Une matrice identité est une matrice - * à 2 dimensions dont tous les éléments de la diagonal vaut 1 - * - * @param size la taille de la matrice - * @return une nouvelle matrice identité - */ - public MatrixND matrixId(int size) { - MatrixND result = create(new int[] { size, size }); - for (int i = 0; i < size; i++) { - result.setValue(i, i, 1); - } - return result; - } + public MatrixND create(String name, int[] dim) { + return new MatrixNDImpl(this, name, dim); + } - protected Vector createVector(int length) { - try { - Constructor c = vectorClass - .getConstructor(new Class[] { Integer.TYPE }); - return (Vector) c.newInstance(new Object[] { length }); - } catch (Exception eee) { - throw new RuntimeException("Can't create vector", eee); - } - } + public MatrixND create(String name, int[] dim, String[] dimNames) { + return new MatrixNDImpl(this, name, dim, dimNames); + } + public MatrixND create(String name, List[] semantics) { + return new MatrixNDImpl(this, name, semantics); + } + + public MatrixND create(String name, List[] semantics, String[] dimNames) { + return new MatrixNDImpl(this, name, semantics, dimNames); + } + + public MatrixND create(MatrixND matrix) { + return new MatrixNDImpl(this, matrix); + } + + /** + * Crée une nouvelle matrice identité. Une matrice identité est une matrice + * à 2 dimensions dont tous les éléments de la diagonal vaut 1 + * + * @param size + * la taille de la matrice + * @return une nouvelle matrice identité + */ + public MatrixND matrixId(int size) { + MatrixND result = create(new int[] { size, size }); + for (int i = 0; i < size; i++) { + result.setValue(i, i, 1); + } + return result; + } + + protected Vector createVector(int length) { + try { + Constructor c = vectorClass + .getConstructor(new Class[] { Integer.TYPE }); + return (Vector) c.newInstance(new Object[] { length }); + } catch (Exception eee) { + throw new RuntimeException("Can't create vector", eee); + } + } + } // MatrixFactory Modified: lutinmatrix/trunk/src/test/java/org/codelutin/math/matrix/MatrixNDTest.java =================================================================== --- lutinmatrix/trunk/src/test/java/org/codelutin/math/matrix/MatrixNDTest.java 2009-02-23 08:48:20 UTC (rev 118) +++ lutinmatrix/trunk/src/test/java/org/codelutin/math/matrix/MatrixNDTest.java 2009-03-03 09:07:38 UTC (rev 119) @@ -508,6 +508,36 @@ assertEquals(48, mat.getValue(0, 0, 0), 0); } + + public void testCreateFromDoubleArray() throws Exception { + MatrixND mat = null; + + mat = getFactory().create(new double[] {1,2,3,4,5,6,7,8,9}, new int[] {3,3}); + + assertEquals(2,mat.getDim().length); + assertEquals(3,mat.getDim(0)); + assertEquals(3,mat.getDim(1)); + assertEquals(1,(int)mat.getValue(new int[] {0,0})); + assertEquals(2,(int)mat.getValue(new int[] {0,1})); + assertEquals(3,(int)mat.getValue(new int[] {0,2})); + assertEquals(4,(int)mat.getValue(new int[] {1,0})); + assertEquals(5,(int)mat.getValue(new int[] {1,1})); + assertEquals(6,(int)mat.getValue(new int[] {1,2})); + assertEquals(7,(int)mat.getValue(new int[] {2,0})); + assertEquals(8,(int)mat.getValue(new int[] {2,1})); + assertEquals(9,(int)mat.getValue(new int[] {2,2})); + + mat = getFactory().create(new double[] {1,2,3}, new int[]{3}); + assertEquals(1,mat.getDim().length); + assertEquals(3,mat.getDim(0)); + assertEquals(1,(int)mat.getValue(new int[] {0})); + assertEquals(2,(int)mat.getValue(new int[] {1})); + assertEquals(3,(int)mat.getValue(new int[] {2})); + + mat = getFactory().create(new double[] {1,2,3,4,5,6,7,8}, new int[] {2,2,2}); + assertNull(mat); + + } public void testReduceDims() throws Exception {
participants (1)
-
jcouteau@users.labs.libre-entreprise.org