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 2*2*2 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;
}
}