ucar.ma2
Class ArrayStructureMA
java.lang.Object
ucar.ma2.Array
ucar.ma2.ArrayStructure
ucar.ma2.ArrayStructureMA
public class ArrayStructureMA
- extends ArrayStructure
Concrete implementation of ArrayStructure, data storage is in member arrays, which are converted to
StructureData member data on the fly.
This defers object creation for efficiency. Use getJavaArrayXXX() and getScalarXXX() data accessors if possible.
How to create:
ArrayStructureMA asma = new ArrayStructureMA( smembers, getShape());
for (int i = 0; i < orgVariables.size(); i++) {
Variable v = (Variable) orgVariables.get(i);
Array data = v.read();
asma.setMemberArray( v.getName(), data);
}
How to do Nested Structures:
Structure {
float f1;
short f2(3);
Structure {
int g1;
double(2) g2;
double(3,4) g3;
Structure {
int h1;
double(2) h2;
} nested2(7);
} nested1(12);
} s(4);
- For f1, you need an ArrayFloat of shape {4}
- For f2, you need an ArrayShort of shape {4, 3} .
- For nested1, you need an ArrayStructure of shape {4, 12}.
Use an ArrayStructureMA that has 3 members:
- For g1, you need an ArrayInt of shape (4, 12}
- For g2, you need an ArrayDouble of shape {4, 12, 2}.
- For g3, you need an ArrayDouble of shape {4, 12, 3, 4}.
- For nested2, you need an ArrayStructure of shape {4, 12, 7}.
Use an ArrayStructureMA that has 2 members:
- For h1, you need an ArrayInt of shape (4, 12, 7}
- For h2, you need an ArrayDouble of shape {4, 12, 7, 2}.
Example code:
public void testMA() throws IOException, InvalidRangeException {
StructureMembers members = new StructureMembers("s");
StructureMembers.Member m = new StructureMembers.Member("f1", "desc", "units", DataType.FLOAT, new int[] {1});
members.addMember( m);
Array data = Array.factory(DataType.FLOAT, new int[] {4});
m.setDataObject( data);
fill(data);
m = new StructureMembers.Member("f2", "desc", "units", DataType.SHORT, new int[] {3});
members.addMember( m);
data = Array.factory(DataType.SHORT, new int[] {4, 3});
m.setDataObject( data);
fill(data);
m = new StructureMembers.Member("nested1", "desc", "units", DataType.STRUCTURE, new int[] {9});
members.addMember( m);
data = makeNested1( m);
m.setDataObject( data);
ArrayStructureMA as = new ArrayStructureMA( members, new int[] {4});
}
public ArrayStructure makeNested1(StructureMembers.Member parent) throws IOException, InvalidRangeException {
StructureMembers members = new StructureMembers(parent.getName());
parent.setStructureMembers( members);
StructureMembers.Member m = new StructureMembers.Member("g1", "desc", "units", DataType.INT, new int[] {1});
members.addMember( m);
Array data = Array.factory(DataType.INT, new int[] {4, 9});
m.setDataObject( data);
fill(data);
m = new StructureMembers.Member("g2", "desc", "units", DataType.DOUBLE, new int[] {2});
members.addMember( m);
data = Array.factory(DataType.DOUBLE, new int[] {4, 9, 2});
m.setDataObject( data);
fill(data);
m = new StructureMembers.Member("g3", "desc", "units", DataType.DOUBLE, new int[] {3, 4});
members.addMember( m);
data = Array.factory(DataType.DOUBLE, new int[] {4, 9, 3, 4});
m.setDataObject( data);
fill(data);
m = new StructureMembers.Member("nested2", "desc", "units", DataType.STRUCTURE, new int[] {7});
members.addMember( m);
data = makeNested2( m);
m.setDataObject( data);
return new ArrayStructureMA( members, new int[] {4, 9});
}
public ArrayStructure makeNested2(StructureMembers.Member parent) throws IOException, InvalidRangeException {
StructureMembers members = new StructureMembers(parent.getName());
parent.setStructureMembers( members);
StructureMembers.Member m = new StructureMembers.Member("h1", "desc", "units", DataType.INT, new int[] {1});
members.addMember( m);
Array data = Array.factory(DataType.INT, new int[] {4, 9, 7});
m.setDataObject( data);
fill(data);
m = new StructureMembers.Member("h2", "desc", "units", DataType.DOUBLE, new int[] {2});
members.addMember( m);
data = Array.factory(DataType.DOUBLE, new int[] {4, 9, 7, 2});
m.setDataObject( data);
fill(data);
return new ArrayStructureMA( members, new int[] {4, 9, 7});
}
- Author:
- caron
- See Also:
Array
Methods inherited from class ucar.ma2.ArrayStructure |
convertScalarDouble, convertScalarFloat, convertScalarInt, copy, createView, extractMemberArray, findMember, getArray, getArrayObject, getArraySequence, getArrayStructure, getBoolean, getBoolean, getByte, getByte, getChar, getChar, getDouble, getDouble, getElementType, getFloat, getFloat, getInt, getInt, getJavaArrayByte, getJavaArrayChar, getJavaArrayDouble, getJavaArrayFloat, getJavaArrayInt, getJavaArrayLong, getJavaArrayShort, getJavaArrayString, getLong, getLong, getMembers, getObject, getObject, getScalarByte, getScalarChar, getScalarDouble, getScalarFloat, getScalarInt, getScalarLong, getScalarObject, getScalarShort, getScalarString, getScalarStructure, getShort, getShort, getSizeBytes, getStorage, getStructureData, getStructureData, getStructureDataIterator, getStructureMemberNames, getStructureMembers, getStructureSize, setBoolean, setBoolean, setByte, setByte, setChar, setChar, setDouble, setDouble, setFloat, setFloat, setInt, setInt, setLong, setLong, setMemberArray, setObject, setObject, setShort, setShort |
Methods inherited from class ucar.ma2.Array |
arraycopy, copyTo1DJavaArray, copyToNDJavaArray, factory, factory, factory, factory, factory, factory, factoryConstant, flip, get1DJavaArray, getDataAsByteBuffer, getIndex, getIndexIterator, getIndexIteratorFast, getIndexPrivate, getRangeIterator, getRank, getShape, getSize, hasNext, isUnsigned, makeArray, makeArray, makeArray, next, nextBoolean, nextByte, nextChar, nextDouble, nextFloat, nextInt, nextLong, nextShort, permute, reduce, reduce, resetLocalIterator, reshape, section, section, section, sectionNoReduce, sectionNoReduce, setUnsigned, shapeToString, slice, toString, transpose |
Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait |
ArrayStructureMA
public ArrayStructureMA(StructureMembers members,
int[] shape)
- Create a new Array of type StructureData and the given members and shape.
You must set the data Arrays on each of the Members, using setDataObject(). These data Arrays contain the data
for that member Variable, for all the StructureData. Therefore it has rank one greater that the Members. The extra
dimension must be the outermost (slowest varying) dimension. ie, if some member has shape [3,10], the array would have
shape [nrows, 3, 10].
- Parameters:
members
- a description of the structure membersshape
- the shape of the Array.
ArrayStructureMA
public ArrayStructureMA(StructureMembers members,
int[] shape,
StructureData[] sdata)
factoryMA
public static ArrayStructureMA factoryMA(ArrayStructure from)
throws java.io.IOException
- Turn any ArrayStructure into a ArrayStructureMA
- Parameters:
from
- copy from here. If from is a ArrayStructureMA, return it.
- Returns:
- equivilent ArrayStructureMA
- Throws:
java.io.IOException
- on error reading a sequence
setMemberArray
public void setMemberArray(java.lang.String memberName,
Array data)
- Set the data array for this member.
- Parameters:
memberName
- name of memberdata
- Array for this member.