Matrix CSV Import/Export

Nuiton-matrix supports 2 format to import/export matrix as string representation in CSV file :

  • one and two dimensional matrix
  • n dimensional matrix

API

To use matrix import/export method use following API:

  • MatrixND#importCSV(Reader reader, int[] position)
  • MatrixND#exportCSV(Writer writer, boolean withSemantics)

one and two dimensional matrix

One and two dimensional CSV file is a basic CSV file containing all values separated by ‘;’ character.

For example :

10000.0;10000.0;10000.0;5000.0;10000.0;10000.0;10000.0;10000.0;10000.0;
10000.0;10000.0;10000.0;5000.0;10000.0;10000.0;10000.0;10000.0;0.0;
10000.0;10000.0;10000.0;5000.0;10000.0;10000.0;10000.0;10000.0;0.0;
10000.0;10000.0;10000.0;5000.0;10000.0;10000.0;10000.0;10000.0;0.0;
10000.0;10000.0;2000.0;5000.0;10000.0;10000.0;10000.0;10000.0;0.0;
10000.0;10000.0;10000.0;5000.0;10000.0;10000.0;10000.0;10000.0;0.0;
10000.0;10000.0;10000.0;5000.0;10000.0;10000.0;10000.0;10000.0;0.0;
10000.0;10000.0;10000.0;5000.0;10000.0;10000.0;10000.0;10000.0;0.0;
10000.0;10000.0;10000.0;5000.0;10000.0;10000.0;10000.0;10000.0;0.0;
10000.0;10000.0;10000.0;5000.0;10000.0;10000.0;10000.0;10000.0;10000.0;

With semantics

Without semantics

n dimensional matrix

With n dimension import, file format is a little bit more complicated. It’s must include:

  • matrix dimensions
  • dimensions semantics
  • value for each dimension

For example, importing a 222 matrix::

[2, 2, 2]
java.lang.String:2009,2010
java.lang.String:Nantes,Lille
java.lang.String:Informatique,Administration
0;0;0;0.0
0;0;1;1.0
0;1;1;4.0
1;0;0;-4.0E-7
1;0;1;2.0
1;1;0;4.0
1;1;1;42.0

Using semantics mapper

Previous example was using only “String” to lookup for semantics. You can use an additional SemanticMapper to use custom object.

For example:

[2, 2, 2]
Year:2009,2010
City:Nantes,Lille
Department:Informatique,Administration
0;0;0;0.0
0;0;1;1.0
0;1;1;4.0
1;0;0;-4.0E-7
1;0;1;2.0
1;1;0;4.0
1;1;1;42.0

The SemanticMapper will be called to resolv object identified by ids such as ‘2009’, ‘2010’…

Here is a SemanticMapper sample code:

public class IsisMatrixSemanticMapper extends SemanticMapper {

    public Class getType(String typeName) {
    
        // In simulation context :
        Class clazz = null;
        try {
            clazz = Class.forName("org.exemple." + typeName);
        } catch (Exception ex) {
            clazz = String.class;
        }
        return clazz;
    }
    
    public Object getValue(Class type, String valueId) {
    
        // In simulation context :
        Object value = null;
        try {
            // lookup in database object identified by valueId
            [...]
    
        } catch (Exception ex) {
            log.warn("Can't get value for " + valueId, ex);
            value = valueId;
        }
        return value;
    
        //return valueId;
    }
}