ucar.ma2
Class MAMath

java.lang.Object
  extended by ucar.ma2.MAMath

public class MAMath
extends java.lang.Object

Element by element algebra on Arrays

Author:
caron
See Also:
Index

Nested Class Summary
static class MAMath.MinMax
          Holds a minimum and maximum value.
static class MAMath.ScaleOffset
          Holds a scale and offset.
 
Constructor Summary
MAMath()
           
 
Method Summary
static Array add(Array a, Array b)
          Add elements of two arrays together, allocating the result array.
static void addDouble(Array result, Array a, Array b)
          Add elements of two arrays together as doubles, place sum in the result array.
static MAMath.ScaleOffset calcScaleOffsetSkipMissingData(Array a, double missingValue, int nbits, boolean isUnsigned)
          Calculate the scale/offset for an array of numbers.
static boolean conformable(Array a, Array b)
          Check that two arrays are conformable.
static boolean conformable(int[] shapeA, int[] shapeB)
          Check that two array shapes are conformable.
static Array convert(Array org, DataType wantType)
          Convert original array to desired type
static Array convert2packed(Array unpacked, double missingValue, int nbits, boolean isUnsigned, DataType packedType)
           
static Array convert2Unpacked(Array packed, MAMath.ScaleOffset scaleOffset)
           
static Array convertUnsigned(Array unsigned)
          Convert unsigned data to signed data of a wider type.
static void copy(Array result, Array a)
          Copy array a to array result, the result array will be in canonical order The operation type is taken from the type of a.
static void copy(DataType dataType, IndexIterator from, IndexIterator to)
          Copy using iterators.
static void copyBoolean(Array result, Array a)
          copy array a to array result as bytes The array a and result must be type boolean
static void copyByte(Array result, Array a)
          copy array a to array result as bytes The values from the array a are converted to byte (if needed), and then converted to the type of result (if needed).
static void copyChar(Array result, Array a)
          copy array a to array result as char The values from the array a are converted to char (if needed), and then converted to the type of result (if needed).
static void copyDouble(Array result, Array a)
          copy array a to array result as doubles The values from the arrays a are converted to double (if needed), and then converted to the type of result (if needed).
static void copyFloat(Array result, Array a)
          copy array a to array result as floats The values from the arrays a are converted to float (if needed), and then converted to the type of result (if needed).
static void copyInt(Array result, Array a)
          copy array a to array result as integers The values from the arrays a are converted to integer (if needed), and then converted to the type of result (if needed).
static void copyLong(Array result, Array a)
          copy array a to array result as longs The values from the array a are converted to long (if needed), and then converted to the type of result (if needed).
static void copyObject(Array result, Array a)
          copy array a to array result as an Object The array a and result must be type object
static void copyShort(Array result, Array a)
          copy array a to array result as shorts The values from the array a are converted to short (if needed), and then converted to the type of result (if needed).
static double getMaximum(Array a)
           
static double getMaximumSkipMissingData(Array a, double missingValue)
           
static double getMinimum(Array a)
           
static double getMinimumSkipMissingData(Array a, double missingValue)
           
static MAMath.MinMax getMinMax(Array a)
          Find min and max value in this array, getting values as doubles.
static MAMath.MinMax getMinMaxSkipMissingData(Array a, double missingValue)
           
static int reducedRank(int[] shape)
          Calculate the reduced rank of this shape, by subtracting dimensions with length 1
static void setDouble(Array result, double val)
          Set all the elements of this array to the given double value.
static double sumDouble(Array a)
          sum all of the elements of array a as doubles.
static double sumDoubleSkipMissingData(Array a, double missingValue)
          sum all of the elements of array a as doubles.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MAMath

public MAMath()
Method Detail

add

public static Array add(Array a,
                        Array b)
                 throws java.lang.IllegalArgumentException
Add elements of two arrays together, allocating the result array. The result type and the operation type are taken from the type of a.

Parameters:
a - add values from here
b - add values from here
Returns:
result = a + b
Throws:
java.lang.IllegalArgumentException - a and b are not conformable
java.lang.UnsupportedOperationException - dont support this data type yet

addDouble

public static void addDouble(Array result,
                             Array a,
                             Array b)
                      throws java.lang.IllegalArgumentException
Add elements of two arrays together as doubles, place sum in the result array. The values from the arrays a and b are converted to double (if needed), and the sum is converted to the type of result (if needed).

Parameters:
result - result array
a - operand
b - operand
Throws:
java.lang.IllegalArgumentException - a,b,and result are not conformable

conformable

public static boolean conformable(Array a,
                                  Array b)
Check that two arrays are conformable.

Parameters:
a - operand
b - operand
Returns:
true if conformable

conformable

public static boolean conformable(int[] shapeA,
                                  int[] shapeB)
Check that two array shapes are conformable. The shapes must match exactly, except that dimensions of length 1 are ignored.

Parameters:
shapeA - shape of array 1
shapeB - shape of array 2
Returns:
true if conformable

convertUnsigned

public static Array convertUnsigned(Array unsigned)
Convert unsigned data to signed data of a wider type.

Parameters:
unsigned - must be of type byte, short or int
Returns:
converted data of type short, int, or long

convert

public static Array convert(Array org,
                            DataType wantType)
Convert original array to desired type

Parameters:
org - original array
wantType - desired type
Returns:
converted data of desired type, or original array if it is already

copy

public static void copy(DataType dataType,
                        IndexIterator from,
                        IndexIterator to)
                 throws java.lang.IllegalArgumentException
Copy using iterators. Will copy until !from.hasNext().

Parameters:
dataType - use this operation type (eg DataType.DOUBLE uses getDoubleNext())
from - copy from here
to - copy to here
Throws:
java.lang.IllegalArgumentException - a and b are not conformable
java.lang.UnsupportedOperationException - dont support this data type

copy

public static void copy(Array result,
                        Array a)
                 throws java.lang.IllegalArgumentException
Copy array a to array result, the result array will be in canonical order The operation type is taken from the type of a.

Parameters:
result - copy to here
a - copy from here
Throws:
java.lang.IllegalArgumentException - a and b are not conformable
java.lang.UnsupportedOperationException - dont support this data type yet

copyDouble

public static void copyDouble(Array result,
                              Array a)
                       throws java.lang.IllegalArgumentException
copy array a to array result as doubles The values from the arrays a are converted to double (if needed), and then converted to the type of result (if needed).

Parameters:
result - copy to here
a - copy from here
Throws:
java.lang.IllegalArgumentException - a and result are not conformable

copyFloat

public static void copyFloat(Array result,
                             Array a)
                      throws java.lang.IllegalArgumentException
copy array a to array result as floats The values from the arrays a are converted to float (if needed), and then converted to the type of result (if needed).

Parameters:
result - copy to here
a - copy from here
Throws:
java.lang.IllegalArgumentException - a and result are not conformable

copyLong

public static void copyLong(Array result,
                            Array a)
                     throws java.lang.IllegalArgumentException
copy array a to array result as longs The values from the array a are converted to long (if needed), and then converted to the type of result (if needed).

Parameters:
result - copy to here
a - copy from here
Throws:
java.lang.IllegalArgumentException - a and result are not conformable

copyInt

public static void copyInt(Array result,
                           Array a)
                    throws java.lang.IllegalArgumentException
copy array a to array result as integers The values from the arrays a are converted to integer (if needed), and then converted to the type of result (if needed).

Parameters:
result - copy to here
a - copy from here
Throws:
java.lang.IllegalArgumentException - a and result are not conformable

copyShort

public static void copyShort(Array result,
                             Array a)
                      throws java.lang.IllegalArgumentException
copy array a to array result as shorts The values from the array a are converted to short (if needed), and then converted to the type of result (if needed).

Parameters:
result - copy to here
a - copy from here
Throws:
java.lang.IllegalArgumentException - a and result are not conformable

copyChar

public static void copyChar(Array result,
                            Array a)
                     throws java.lang.IllegalArgumentException
copy array a to array result as char The values from the array a are converted to char (if needed), and then converted to the type of result (if needed).

Parameters:
result - copy to here
a - copy from here
Throws:
java.lang.IllegalArgumentException - a and result are not conformable

copyByte

public static void copyByte(Array result,
                            Array a)
                     throws java.lang.IllegalArgumentException
copy array a to array result as bytes The values from the array a are converted to byte (if needed), and then converted to the type of result (if needed).

Parameters:
result - copy to here
a - copy from here
Throws:
java.lang.IllegalArgumentException - a and result are not conformable

copyBoolean

public static void copyBoolean(Array result,
                               Array a)
                        throws java.lang.IllegalArgumentException
copy array a to array result as bytes The array a and result must be type boolean

Parameters:
result - copy to here
a - copy from here
Throws:
java.lang.IllegalArgumentException - a and result are not conformable

copyObject

public static void copyObject(Array result,
                              Array a)
                       throws java.lang.IllegalArgumentException
copy array a to array result as an Object The array a and result must be type object

Parameters:
result - copy to here
a - copy from here
Throws:
java.lang.IllegalArgumentException - a and result are not conformable

reducedRank

public static int reducedRank(int[] shape)
Calculate the reduced rank of this shape, by subtracting dimensions with length 1

Parameters:
shape - shape of the array
Returns:
rank without dimensions of length 1

getMinimum

public static double getMinimum(Array a)

getMaximum

public static double getMaximum(Array a)

getMinMax

public static MAMath.MinMax getMinMax(Array a)
Find min and max value in this array, getting values as doubles. Skip Double.NaN.

Parameters:
a - the array.
Returns:
MinMax

getMinimumSkipMissingData

public static double getMinimumSkipMissingData(Array a,
                                               double missingValue)

getMaximumSkipMissingData

public static double getMaximumSkipMissingData(Array a,
                                               double missingValue)

getMinMaxSkipMissingData

public static MAMath.MinMax getMinMaxSkipMissingData(Array a,
                                                     double missingValue)

setDouble

public static void setDouble(Array result,
                             double val)
Set all the elements of this array to the given double value. The value is converted to the element type of the array, if needed.

Parameters:
result - change this Array
val - set all elements to this value

sumDouble

public static double sumDouble(Array a)
sum all of the elements of array a as doubles. The values from the array a are converted to double (if needed).

Parameters:
a - read values from this Array
Returns:
sum of elements

sumDoubleSkipMissingData

public static double sumDoubleSkipMissingData(Array a,
                                              double missingValue)
sum all of the elements of array a as doubles. The values from the array a are converted to double (if needed).

Parameters:
a - read values from this Array
missingValue - skip values equal to this, or which are NaNs
Returns:
sum of elements

calcScaleOffsetSkipMissingData

public static MAMath.ScaleOffset calcScaleOffsetSkipMissingData(Array a,
                                                                double missingValue,
                                                                int nbits,
                                                                boolean isUnsigned)
Calculate the scale/offset for an array of numbers.
 If signed:
   then
     max value unpacked = 2^(n-1) - 1 packed
     min value unpacked = -(2^(n-1) - 1) packed
   note that -2^(n-1) is unused, and a good place to map missing values
   by solving 2 eq in 2 unknowns, we get:
     scale = (max - min) / (2^n - 2)
     offset = (max + min) / 2
 If unsigned then
     max value unpacked = 2^n - 1 packed
     min value unpacked = 0 packed
   and:
     scale = (max - min) / (2^n - 1)
     offset = min
   One could modify this to allow a holder for missing values.
 

Parameters:
a - array to convert (not changed)
missingValue - skip these
nbits - map into this many bits
isUnsigned - use signed or unsigned packed values
Returns:
ScaleOffset, calculated as above.

convert2packed

public static Array convert2packed(Array unpacked,
                                   double missingValue,
                                   int nbits,
                                   boolean isUnsigned,
                                   DataType packedType)

convert2Unpacked

public static Array convert2Unpacked(Array packed,
                                     MAMath.ScaleOffset scaleOffset)