MaskArrMath.h
Classes
- Global Functions -- Mathematical operations for MaskedArrays (and with Arrays) (full description)
Interface
- const MaskedArray<T> & operator+= (const MaskedArray<T> &left, const Array<T> &other)
- const MaskedArray<T> & operator-= (const MaskedArray<T> &left, const Array<T> &other)
- const MaskedArray<T> & operator*= (const MaskedArray<T> &left, const Array<T> &other)
- const MaskedArray<T> & operator/= (const MaskedArray<T> &left, const Array<T> &other)
- Array<T> & operator+= (Array<T> &left, const MaskedArray<T> &other)
- Array<T> & operator-= (Array<T> &left, const MaskedArray<T> &other)
- Array<T> & operator*= (Array<T> &left, const MaskedArray<T> &other)
- Array<T> & operator/= (Array<T> &left, const MaskedArray<T> &other)
- const MaskedArray<T> & operator+= (const MaskedArray<T> &left, const MaskedArray<T> &other)
- const MaskedArray<T> & operator-= (const MaskedArray<T> &left, const MaskedArray<T> &other)
- const MaskedArray<T> & operator*= (const MaskedArray<T> &left, const MaskedArray<T> &other)
- const MaskedArray<T> & operator/= (const MaskedArray<T> &left,const MaskedArray<T> &other)
- const MaskedArray<T> & operator/= (const MaskedArray<T> &left,const MaskedArray<S> &other)
- const MaskedArray<T> & operator+= (const MaskedArray<T> &left,const T &other)
- const MaskedArray<T> & operator-= (const MaskedArray<T> &left,const T &other)
- const MaskedArray<T> & operator*= (const MaskedArray<T> &left,const T &other)
- const MaskedArray<T> & operator/= (const MaskedArray<T> &left,const T &other)
- MaskedArray<T> operator+(const MaskedArray<T> &a)
- MaskedArray<T> operator-(const MaskedArray<T> &a)
- MaskedArray<T> operator+ (const MaskedArray<T> &left, const Array<T> &right)
- MaskedArray<T> operator- (const MaskedArray<T> &left, const Array<T> &right)
- MaskedArray<T> operator* (const MaskedArray<T> &left, const Array<T> &right)
- MaskedArray<T> operator/ (const MaskedArray<T> &left, const Array<T> &right)
- MaskedArray<T> operator+ (const Array<T> &left, const MaskedArray<T> &right)
- MaskedArray<T> operator- (const Array<T> &left, const MaskedArray<T> &right)
- MaskedArray<T> operator* (const Array<T> &left, const MaskedArray<T> &right)
- MaskedArray<T> operator/ (const Array<T> &left, const MaskedArray<T> &right)
- MaskedArray<T> operator+ (const MaskedArray<T> &left,const MaskedArray<T> &right)
- MaskedArray<T> operator- (const MaskedArray<T> &left,const MaskedArray<T> &right)
- MaskedArray<T> operator* (const MaskedArray<T> &left,const MaskedArray<T> &right)
- MaskedArray<T> operator/ (const MaskedArray<T> &left,const MaskedArray<T> &right)
- MaskedArray<T> operator+ (const MaskedArray<T> &left, const T &right)
- MaskedArray<T> operator- (const MaskedArray<T> &left, const T &right)
- MaskedArray<T> operator* (const MaskedArray<T> &left, const T &right)
- MaskedArray<T> operator/ (const MaskedArray<T> &left, const T &right)
- MaskedArray<Complex> operator* (const MaskedArray<Complex> &left, const Float &right)
- MaskedArray<T> operator+ (const T &left, const MaskedArray<T> &right)
- MaskedArray<T> operator- (const T &left, const MaskedArray<T> &right)
- MaskedArray<T> operator* (const T &left, const MaskedArray<T> &right)
- MaskedArray<T> operator/ (const T &left, const MaskedArray<T> &right)
- MaskedArray<Complex> operator* (const Float &left, const MaskedArray<Complex> &right)
- MaskedArray<T> sin(const MaskedArray<T> &left)
- MaskedArray<T> cos(const MaskedArray<T> &left)
- MaskedArray<T> tan(const MaskedArray<T> &left)
- MaskedArray<T> asin(const MaskedArray<T> &left)
- MaskedArray<T> acos(const MaskedArray<T> &left)
- MaskedArray<T> atan(const MaskedArray<T> &left)
- MaskedArray<T> sinh(const MaskedArray<T> &left)
- MaskedArray<T> cosh(const MaskedArray<T> &left)
- MaskedArray<T> tanh(const MaskedArray<T> &left)
- MaskedArray<T> exp(const MaskedArray<T> &left)
- MaskedArray<T> log(const MaskedArray<T> &left)
- MaskedArray<T> log10(const MaskedArray<T> &left)
- MaskedArray<T> sqrt(const MaskedArray<T> &left)
- MaskedArray<T> abs(const MaskedArray<T> &left)
- MaskedArray<T> fabs(const MaskedArray<T> &left)
- MaskedArray<T> ceil(const MaskedArray<T> &left)
- MaskedArray<T> floor(const MaskedArray<T> &left)
- MaskedArray<T> atan2(const MaskedArray<T> &left, const Array<T> &right)
- MaskedArray<T> fmod(const MaskedArray<T> &left, const Array<T> &right)
- MaskedArray<T> atan2(const Array<T> &left, const MaskedArray<T> &right)
- MaskedArray<T> fmod(const Array<T> &left, const MaskedArray<T> &right)
- MaskedArray<T> atan2(const MaskedArray<T> &left,const MaskedArray<T> &right)
- MaskedArray<T> fmod(const MaskedArray<T> &left,const MaskedArray<T> &right)
- MaskedArray<T> atan2(const MaskedArray<T> &left, const T &right)
- MaskedArray<T> fmod(const MaskedArray<T> &left, const T &right)
- MaskedArray<T> atan2(const T &left, const MaskedArray<T> &right)
- MaskedArray<T> fmod(const T &left, const MaskedArray<T> &right)
- MaskedArray<T> pow(const MaskedArray<T> &left, const Array<U> &right)
- MaskedArray<T> pow(const Array<T> &left, const MaskedArray<U> &right)
- MaskedArray<T> pow(const MaskedArray<T> &left,const MaskedArray<U> &right)
- MaskedArray<T> pow(const MaskedArray<T> &left, const Double &right)
- void minMax(T &minVal, T &maxVal, IPosition &minPos, IPosition &maxPos,const IPosition<T> &marray)
- void minMax(T &minVal, T &maxVal,const MaskedArray<T> &marray)
- T min(const MaskedArray<T> &left)
- MaskedArray<T> min(const MaskedArray<T> &left, const Array<T> &right)
- MaskedArray<T> min(const Array<T> &left, const MaskedArray<T> &right)
- MaskedArray<T> min(const MaskedArray<T> &left, const MaskedArray<T> &right)
- MaskedArray<T> min(const T &left, const MaskedArray<T> &right)
- MaskedArray<T> min(const MaskedArray<T> &left, const T &right)
- void min(const MaskedArray<T> &result, const Array<T> &left, const Array<T> &right)
- T max(const MaskedArray<T> &left)
- MaskedArray<T> max(const MaskedArray<T> &left, const Array<T> &right)
- MaskedArray<T> max(const Array<T> &left, const MaskedArray<T> &right)
- MaskedArray<T> max(const MaskedArray<T> &left, const MaskedArray<T> &right)
- MaskedArray<T> max(const T &left, const MaskedArray<T> &right)
- MaskedArray<T> max(const MaskedArray<T> &left, const T &right)
- void max(const MaskedArray<T> &result,const Array<T> &left, const Array<T> &right)
- void indgen(MaskedArray<T> &a, T start, T inc)
- void indgen(MaskedArray<T> &a)
- void indgen(MaskedArray<T> &a, T start)
- T sum(const MaskedArray<T> &a)
- T sumsquares(const MaskedArray<T> &a)
- T product(const MaskedArray<T> &a)
- T mean(const MaskedArray<T> &a)
- T variance(const MaskedArray<T> &a)
- T variance(const MaskedArray<T> &a, T mean)
- T stddev(const MaskedArray<T> &a)
- T stddev(const MaskedArray<T> &a, T mean)
- T avdev(const MaskedArray<T> &a)
- T avdev(const MaskedArray<T> &a,T mean)
- inline T median(const MaskedArray<T> &a, Bool sorted = False)
- T median(const MaskedArray<T> &a, Bool sorted, Bool takeEvenMean)
- MaskedArray<T> square(const MaskedArray<T> &val)
- MaskedArray<T> cube(const MaskedArray<T> &val)
Review Status
- Programs:
- Tests:
- tMaskArrMath0
- tMaskArrMath1
- tMaskArrMath2
- tMaskArrExcp
Prerequisite
Etymology
MaskArrMath is short for MaskedArrayMath, which is too long by
AIPS++ file naming conventions. This file contains global functions
which perform element by element mathematical operations on masked arrays.
Synopsis
These functions perform element by element mathematical operations on
masked arrays. With two arrays, they must both conform, and the result
is done element by element, for those locations where the mask of the
MaskedArray is True. For two MaskedArrays, the "and" of the masks is used.
Example
Vector<Int> a(10);
Vector<Int> b(10);
Vector<Int> c(10);
. . .
c = a(a>0) + b(b>0);
This example sets those elements of c where ((a>0) && (b>0)) to (a+b).
Elements of c where !((a>0) && (b>0)) are unchanged. The result of
this operation is a MaskedArray. The assignment from this
MaskedArray to the Vector c only assigns those elements
where the mask is True.
Example
Vector<Double> a(10);
Vector<Double> b(10);
Vector<Double> c(10);
. . .
c = atan2 (a, b(b>0);
This example sets those elements of c where (b>0) to atan2 (a,b).
Elements of c where !(b>0) are unchanged. The result of
this operation is a MaskedArray. The assignment from this
MaskedArray to the Vector c only assigns those elements
where the mask is True.
Example
Vector<Int> a(10);
Int result;
. . .
result = sum (a(a>0));
This example sums a, for those elements of a which are greater than 0.
Motivation
One wants to be able to mask arrays and perform mathematical operations on
those masked arrays. Since the masked arrays are only defined where
the masks are True, the result must be a MaskedArray, or a simple number.
Member Description
Element by element arithmetic modifying left in-place. left and other
must be conformant.
Thrown Exceptions
Element by element arithmetic modifying left in-place. The scalar "other"
behaves as if it were a conformant Array to left filled with constant values.
Unary arithmetic operation.
Element by element arithmetic on MaskedArrays, returns a MaskedArray.
Thrown Exceptions
Element by element arithmetic between a MaskedArray and a scalar, returning
a MaskedArray.
Element by element arithmetic between a scalar and a MaskedArray, returning
a MaskedArray.
Transcendental function applied to the array on an element-by-element
basis. Although a template function, this may not make sense for all
numeric types.
Transcendental functions requiring two arguments applied on an element-by-element
basis. Although a template function, this may not make sense for all
numeric types.
Thrown Exceptions
void minMax(T &minVal, T &maxVal, IPosition &minPos, IPosition &maxPos,const IPosition<T> &marray)
void minMax(T &minVal, T &maxVal,const MaskedArray<T> &marray)
Find the minimum and maximum values of a MaskedArray.
Also find the IPositions of the minimum and maximum values.
Thrown Exceptions
T min(const MaskedArray<T> &left)
The "min" and "max" functions require that the type "T" have comparison
operators.
The minimum element of the array.
Return an array that contains the minimum of "left" and "right" at each
position.
"left" and "right" must be conformant.
Thrown Exceptions
void min(const MaskedArray<T> &result, const Array<T> &left, const Array<T> &right)
"result" contains the minimum of "left" and "right" at each position.
"result", "left", and "right" must be conformant.
Thrown Exceptions
T max(const MaskedArray<T> &left)
The maximum element of the array.
Return an array that contains the maximum of "left" and "right" at each
position.
"left" and "right" must be conformant.
Thrown Exceptions
void max(const MaskedArray<T> &result,const Array<T> &left, const Array<T> &right)
"result" contains the maximum of "left" and "right" at each position.
"result", "left", and "right" must be conformant.
Thrown Exceptions
Fills all elements of "array" where the mask is True with a sequence
starting with "start" and incrementing by "inc" for each element
where the mask is True.
The first axis varies most rapidly.
Fills all elements of "array" where the mask is True with a sequence
starting with 0 and incremented by one for each element
where the mask is True.
The first axis varies most rapidly.
Fills all elements of "array" where the mask is True with a sequence
starting with "start" and incremented by one for each element
where the mask is True.
The first axis varies most rapidly.
T sum(const MaskedArray<T> &a)
Thrown Exceptions
Sum of every element of the MaskedArray where the Mask is True.
T sumsquares(const MaskedArray<T> &a)
Sum of the squares of every element of the MaskedArray where the Mask is True.
T product(const MaskedArray<T> &a)
Product of every element of the MaskedArray where the Mask is True.
This could of course easily overflow.
T mean(const MaskedArray<T> &a)
The mean of "a" is the sum of all elements of "a" divided by the number
of elements of "a".
T variance(const MaskedArray<T> &a)
The variance of "a" is the sum of (a(i) - mean(a))**2/(a.nelements() - 1).
N.B. N-1, not N in the denominator).
T variance(const MaskedArray<T> &a, T mean)
The variance of "a" is the sum of (a(i) - mean(a))**2/(a.nelements() - 1).
N.B. N-1, not N in the denominator).
Rather than using a computed mean, use the supplied value.
T stddev(const MaskedArray<T> &a)
The standard deviation of "a" is the sqare root of its variance.
T stddev(const MaskedArray<T> &a, T mean)
The standard deviation of "a" is the sqare root of its variance.
Rather than using a computed mean, use the supplied value.
T avdev(const MaskedArray<T> &a)
The average deviation of "a" is the sum of abs(a(i) - mean(a))/N. (N.B.
N, not N-1 in the denominator).
T avdev(const MaskedArray<T> &a,T mean)
The average deviation of "a" is the sum of abs(a(i) - mean(a))/N. (N.B.
N, not N-1 in the denominator).
Rather than using a computed mean, use the supplied value.
inline T median(const MaskedArray<T> &a, Bool sorted = False)
T median(const MaskedArray<T> &a, Bool sorted, Bool takeEvenMean)
The median of "a" is a(n/2).
When a has an even number of elements and the switch takeEvenMean is set,
the median is 0.5*(a(n/2) + a((n+1)/2)).
According to Numerical Recipes (2nd edition) it makes little sense to take
the mean when the array is large enough (> 100 elements). Therefore
the default for takeEvenMean is False when the array has > 100 elements,
otherwise it is True.
If "sorted"==True we assume the data is already sorted and we
compute the median directly. Otherwise the function GenSort::kthLargest
is used to find the median (kthLargest is about 6 times faster
than a full quicksort).
Returns a MaskedArray where every element is squared.
Returns a MaskedArray where every element is cubed.