A 2-D Specialization of the Array class. More...
#include <Matrix.h>
Public Member Functions | |
Matrix () | |
A Matrix of length zero in each dimension; zero origin. | |
Matrix (size_t l1, size_t l2) | |
A Matrix with "l1" rows and "l2" columns. | |
Matrix (size_t l1, size_t l2, ArrayInitPolicy initPolicy) | |
A Matrix with "l1" rows and "l2" columns. | |
Matrix (size_t l1, size_t l2, const T &initialValue) | |
A Matrix with "l1" rows and "l2" columns. | |
Matrix (const IPosition &len) | |
A matrix of shape with shape "len". | |
Matrix (const IPosition &len, ArrayInitPolicy initPolicy) | |
A matrix of shape with shape "len". | |
Matrix (const IPosition &len, const T &initialValue) | |
A matrix of shape with shape "len". | |
Matrix (const Matrix< T > &other) | |
The copy constructor uses reference semantics. | |
Matrix (const Array< T > &other) | |
Construct a Matrix by reference from "other". | |
Matrix (const IPosition &shape, T *storage, StorageInitPolicy policy=COPY) | |
Create an Matrix of a given shape from a pointer. | |
Matrix (const IPosition &shape, T *storage, StorageInitPolicy policy, AbstractAllocator< T > const &allocator) | |
Create an Matrix of a given shape from a pointer. | |
Matrix (const IPosition &shape, const T *storage) | |
Create an Matrix of a given shape from a pointer. | |
virtual | ~Matrix () |
Define a destructor, otherwise the (SUN) compiler makes a static one. | |
virtual void | assign (const Array< T > &other) |
Assign the other array (which must be dimension 2) to this matrix. | |
virtual void | reference (const Array< T > &other) |
Make this matrix a reference to other. | |
void | resize (size_t nx, size_t ny, Bool copyValues=False) |
void | resize (size_t nx, size_t ny, Bool copyValues, ArrayInitPolicy policy) |
virtual void | resize () |
Make this array a different shape. | |
virtual void | resize (const IPosition &newShape, Bool copyValues, ArrayInitPolicy policy) |
Resize the array and optionally copy the values. | |
Matrix< T > & | operator= (const Matrix< T > &other) |
Copy the values from other to this Matrix. | |
virtual Array< T > & | operator= (const Array< T > &other) |
Array< T > & | operator= (const T &val) |
Copy val into every element of this Matrix; i.e. | |
Matrix< T > & | operator= (const MaskedArray< T > &marray) |
Copy to this those values in marray whose corresponding elements in marray's mask are True. | |
T & | operator() (const IPosition &i) |
Single-pixel addressing. | |
const T & | operator() (const IPosition &i) const |
T & | operator() (size_t i1, size_t i2) |
const T & | operator() (size_t i1, size_t i2) const |
MaskedArray< T > | operator() (const LogicalArray &mask) const |
The array is masked by the input LogicalArray. | |
MaskedArray< T > | operator() (const LogicalArray &mask) |
Return a MaskedArray. | |
MaskedArray< T > | operator() (const MaskedLogicalArray &mask) const |
The array is masked by the input MaskedLogicalArray. | |
MaskedArray< T > | operator() (const MaskedLogicalArray &mask) |
Return a MaskedArray. | |
Vector< T > | row (size_t i) |
Returns a reference to the i'th row. | |
const Vector< T > | row (size_t i) const |
Vector< T > | column (size_t j) |
Returns a reference to the j'th column. | |
const Vector< T > | column (size_t j) const |
Vector< T > | diagonal (Int64 n=0) |
Returns a diagonal from the Matrix. | |
const Vector< T > | diagonal (Int64 n=0) const |
Matrix< T > | operator() (const Slice &sliceX, const Slice &sliceY) |
Take a slice of this matrix. | |
const Matrix< T > | operator() (const Slice &sliceX, const Slice &sliceY) const |
Array< T > | operator() (const IPosition &blc, const IPosition &trc, const IPosition &incr) |
Slice using IPositions. | |
const Array< T > | operator() (const IPosition &blc, const IPosition &trc, const IPosition &incr) const |
Array< T > | operator() (const IPosition &blc, const IPosition &trc) |
Get a reference to an array section extending from start to end (inclusive). | |
const Array< T > | operator() (const IPosition &blc, const IPosition &trc) const |
Array< T > | operator() (const Slicer &slicer) |
Get a reference to an array section using a Slicer. | |
const Array< T > | operator() (const Slicer &slicer) const |
const IPosition & | shape () const |
The length of each axis of the Matrix. | |
void | shape (Int &s1, Int &s2) const |
size_t | nrow () const |
The number of rows in the Matrix, i.e. | |
size_t | ncolumn () const |
The number of columns in the Matrix, i.e. | |
virtual Bool | ok () const |
Checks that the Matrix is consistent (invariants check out). | |
Static Public Member Functions | |
static Matrix< T > | identity (size_t n) |
Create an identity matrix of side length n. | |
Protected Member Functions | |
virtual void | preTakeStorage (const IPosition &shape) |
pre/post processing hook of takeStorage() for subclasses. | |
virtual void | postTakeStorage () |
virtual void | doNonDegenerate (const Array< T > &other, const IPosition &ignoreAxes) |
Remove the degenerate axes from other and store result in this matrix. | |
Private Member Functions | |
void | makeIndexingConstants () |
Helper fn to calculate the indexing constants. | |
Private Attributes | |
size_t | xinc_p |
Cached constants to improve indexing. | |
size_t | yinc_p |
A 2-D Specialization of the Array class.
Matrix objects are two-dimensional specializations (e.g., more convenient and efficient indexing) of the general Array class. You might also want to look at the Array documentation to see inherited functionality. A tutorial on using the array classes in general is available in the "AIPS++ Programming Manual".
Generally the member functions of Array are also available in Matrix versions which take a pair of integers where the array needs an IPosition. Since the Matrix is two-dimensional, the IPositions are overkill, although you may use those versions if you want to.
Matrix<Int> mi(100,100); // Shape is 100x100 mi.resize(50,50); // Shape now 50x50
Slices may be taken with the Slice class. To take a slice, one "indexes" with one Slice(start, length, inc) for each axis, where end and inc are optional. Additionally, there are row(), column() and diagonal() member functions which return Vector's which refer to the storage back in the Matrix:
Matrix<Float> mf(100, 100); mf.diagonal() = 1;
Correct indexing order of a matrix is:
Matrix<Int> mi(n1,n2) // [nrow, ncolumn] for (uInt j=0; j<mi.ncolumn(); j++) { for (uInt i=0; i<mi.nrow(); i++) { mi(i,j) = i*j; } }
Element-by-element arithmetic and logical operations are available (in aips/ArrayMath.h and aips/ArrayLogical.h). Other Matrix operations (e.g. LU decomposition) are available, and more appear periodically.
As with the Arrays, if the preprocessor symbol AIPS_DEBUG is defined at compile time invariants will be checked on entry to most member functions. Additionally, if AIPS_ARRAY_INDEX_CHECK is defined index operations will be bounds-checked. Neither of these should be defined for production code.
Definition at line 94 of file Matrix.h.
casacore::Matrix< T >::Matrix | ( | ) |
A Matrix of length zero in each dimension; zero origin.
casacore::Matrix< T >::Matrix | ( | size_t | l1, | |
size_t | l2 | |||
) |
A Matrix with "l1" rows and "l2" columns.
casacore::Matrix< T >::Matrix | ( | size_t | l1, | |
size_t | l2, | |||
ArrayInitPolicy | initPolicy | |||
) |
A Matrix with "l1" rows and "l2" columns.
casacore::Matrix< T >::Matrix | ( | size_t | l1, | |
size_t | l2, | |||
const T & | initialValue | |||
) |
A Matrix with "l1" rows and "l2" columns.
Fill it with the initial value.
casacore::Matrix< T >::Matrix | ( | const IPosition & | len | ) |
A matrix of shape with shape "len".
casacore::Matrix< T >::Matrix | ( | const IPosition & | len, | |
ArrayInitPolicy | initPolicy | |||
) |
A matrix of shape with shape "len".
casacore::Matrix< T >::Matrix | ( | const IPosition & | len, | |
const T & | initialValue | |||
) |
A matrix of shape with shape "len".
Fill it with the initial value.
casacore::Matrix< T >::Matrix | ( | const Matrix< T > & | other | ) |
The copy constructor uses reference semantics.
casacore::Matrix< T >::Matrix | ( | const Array< T > & | other | ) |
casacore::Matrix< T >::Matrix | ( | const IPosition & | shape, | |
T * | storage, | |||
StorageInitPolicy | policy = COPY | |||
) |
Create an Matrix of a given shape from a pointer.
casacore::Matrix< T >::Matrix | ( | const IPosition & | shape, | |
T * | storage, | |||
StorageInitPolicy | policy, | |||
AbstractAllocator< T > const & | allocator | |||
) |
Create an Matrix of a given shape from a pointer.
casacore::Matrix< T >::Matrix | ( | const IPosition & | shape, | |
const T * | storage | |||
) |
Create an Matrix of a given shape from a pointer.
Because the pointer is const, a copy is always made.
virtual casacore::Matrix< T >::~Matrix | ( | ) | [virtual] |
Define a destructor, otherwise the (SUN) compiler makes a static one.
virtual void casacore::Matrix< T >::assign | ( | const Array< T > & | other | ) | [virtual] |
Assign the other array (which must be dimension 2) to this matrix.
If the shapes mismatch, this array is resized.
const Vector<T> casacore::Matrix< T >::column | ( | size_t | j | ) | const |
Vector<T> casacore::Matrix< T >::column | ( | size_t | j | ) |
Returns a reference to the j'th column.
Referenced by casa::ScantableFieldIterator::getEntry().
const Vector<T> casacore::Matrix< T >::diagonal | ( | Int64 | n = 0 |
) | const |
Vector<T> casacore::Matrix< T >::diagonal | ( | Int64 | n = 0 |
) |
virtual void casacore::Matrix< T >::doNonDegenerate | ( | const Array< T > & | other, | |
const IPosition & | ignoreAxes | |||
) | [protected, virtual] |
Remove the degenerate axes from other and store result in this matrix.
An exception is thrown if removing degenerate axes does not result in a matrix.
static Matrix<T> casacore::Matrix< T >::identity | ( | size_t | n | ) | [static] |
Create an identity matrix of side length n.
(Could not do this as a constructor because of ambiguities with other constructors).
void casacore::Matrix< T >::makeIndexingConstants | ( | ) | [private] |
Helper fn to calculate the indexing constants.
size_t casacore::Matrix< T >::ncolumn | ( | ) | const [inline] |
size_t casacore::Matrix< T >::nrow | ( | ) | const [inline] |
virtual Bool casacore::Matrix< T >::ok | ( | ) | const [virtual] |
Checks that the Matrix is consistent (invariants check out).
Reimplemented from casacore::Array< T >.
const Array<T> casacore::Matrix< T >::operator() | ( | const Slicer & | slicer | ) | const [inline] |
Reimplemented from casacore::Array< T >.
Array<T> casacore::Matrix< T >::operator() | ( | const Slicer & | ) | [inline] |
Get a reference to an array section using a Slicer.
Reimplemented from casacore::Array< T >.
const Array<T> casacore::Matrix< T >::operator() | ( | const IPosition & | blc, | |
const IPosition & | trc | |||
) | const [inline] |
Reimplemented from casacore::Array< T >.
Array<T> casacore::Matrix< T >::operator() | ( | const IPosition & | start, | |
const IPosition & | end | |||
) | [inline] |
Get a reference to an array section extending from start to end (inclusive).
Reimplemented from casacore::Array< T >.
const Array<T> casacore::Matrix< T >::operator() | ( | const IPosition & | blc, | |
const IPosition & | trc, | |||
const IPosition & | incr | |||
) | const [inline] |
Reimplemented from casacore::Array< T >.
Array<T> casacore::Matrix< T >::operator() | ( | const IPosition & | blc, | |
const IPosition & | trc, | |||
const IPosition & | incr | |||
) | [inline] |
Slice using IPositions.
Required to be defined, otherwise the base class versions are hidden.
Reimplemented from casacore::Array< T >.
const Matrix<T> casacore::Matrix< T >::operator() | ( | const Slice & | sliceX, | |
const Slice & | sliceY | |||
) | const |
Matrix<T> casacore::Matrix< T >::operator() | ( | const Slice & | sliceX, | |
const Slice & | sliceY | |||
) |
Take a slice of this matrix.
Slices are always indexed starting at zero. This uses reference semantics, i.e. changing a value in the slice changes the original.
Matrix<Double> vd(100,100); //..\. vd(Slice(0,10),Slice(10,10)) = -1.0; // 10x10 sub-matrix set to -1.0
MaskedArray<T> casacore::Matrix< T >::operator() | ( | const MaskedLogicalArray & | mask | ) | [inline] |
Return a MaskedArray.
Reimplemented from casacore::Array< T >.
MaskedArray<T> casacore::Matrix< T >::operator() | ( | const MaskedLogicalArray & | mask | ) | const [inline] |
The array is masked by the input MaskedLogicalArray.
The mask is effectively the AND of the internal LogicalArray and the internal mask of the MaskedLogicalArray. The MaskedLogicalArray must conform to the array.
Return a MaskedArray.
Reimplemented from casacore::Array< T >.
MaskedArray<T> casacore::Matrix< T >::operator() | ( | const LogicalArray & | mask | ) | [inline] |
Return a MaskedArray.
Reimplemented from casacore::Array< T >.
MaskedArray<T> casacore::Matrix< T >::operator() | ( | const LogicalArray & | mask | ) | const [inline] |
The array is masked by the input LogicalArray.
This mask must conform to the array.
Return a MaskedArray.
Reimplemented from casacore::Array< T >.
const T& casacore::Matrix< T >::operator() | ( | size_t | i1, | |
size_t | i2 | |||
) | const [inline] |
T& casacore::Matrix< T >::operator() | ( | size_t | i1, | |
size_t | i2 | |||
) | [inline] |
const T& casacore::Matrix< T >::operator() | ( | const IPosition & | i | ) | const [inline] |
Reimplemented from casacore::Array< T >.
T& casacore::Matrix< T >::operator() | ( | const IPosition & | i | ) | [inline] |
Single-pixel addressing.
If AIPS_ARRAY_INDEX_CHECK is defined, bounds checking is performed.
Reimplemented from casacore::Array< T >.
Definition at line 186 of file Matrix.h.
Referenced by casacore::Matrix< Complex >::operator()().
Matrix<T>& casacore::Matrix< T >::operator= | ( | const MaskedArray< T > & | marray | ) | [inline] |
Copy to this those values in marray whose corresponding elements in marray's mask are True.
Reimplemented from casacore::Array< T >.
Array<T>& casacore::Matrix< T >::operator= | ( | const T & | val | ) | [inline] |
Copy val into every element of this Matrix; i.e.
behaves as if val were a constant conformant matrix.
Reimplemented from casacore::Array< T >.
virtual Array<T>& casacore::Matrix< T >::operator= | ( | const Array< T > & | other | ) | [virtual] |
Matrix<T>& casacore::Matrix< T >::operator= | ( | const Matrix< T > & | other | ) | [virtual] |
Copy the values from other to this Matrix.
If this matrix has zero elements then it will resize to be the same shape as other; otherwise other must conform to this. Note that the assign function can be used to assign a non-conforming matrix.
Reimplemented from casacore::Array< T >.
Referenced by casacore::Matrix< Complex >::operator=().
virtual void casacore::Matrix< T >::postTakeStorage | ( | ) | [protected, virtual] |
Reimplemented from casacore::Array< T >.
virtual void casacore::Matrix< T >::preTakeStorage | ( | const IPosition & | ) | [protected, virtual] |
pre/post processing hook of takeStorage() for subclasses.
Reimplemented from casacore::Array< T >.
virtual void casacore::Matrix< T >::reference | ( | const Array< T > & | other | ) | [virtual] |
Make this matrix a reference to other.
Other must be of dimensionality 2 or less.
virtual void casacore::Matrix< T >::resize | ( | const IPosition & | newShape, | |
Bool | copyValues, | |||
ArrayInitPolicy | policy | |||
) | [virtual] |
Resize the array and optionally copy the values.
The default implementation in ArrayBase throws an exception.
Reimplemented from casacore::Array< T >.
virtual void casacore::Matrix< T >::resize | ( | ) | [virtual] |
Make this array a different shape.
If copyValues==True
the old values are copied over to the new array. Copying is done on a per axis basis, thus a subsection with the minimum of the old and new shape is copied.
Resize without argument is equal to resize(IPosition()).
It is important to note that if multiple Array objects reference the same data storage, this Array object still references the same data storage as the other Array objects if the shape does not change. Otherwise this Array object references newly allocated storage, while the other Array objects still reference the existing data storage.
If you want to be sure that the data storage of this Array object is not referenced by other Array objects, the function unique should be called first.
Reimplemented from casacore::Array< T >.
Referenced by casacore::Matrix< Complex >::resize().
void casacore::Matrix< T >::resize | ( | size_t | nx, | |
size_t | ny, | |||
Bool | copyValues, | |||
ArrayInitPolicy | policy | |||
) |
void casacore::Matrix< T >::resize | ( | size_t | nx, | |
size_t | ny, | |||
Bool | copyValues = False | |||
) | [inline] |
Definition at line 154 of file Matrix.h.
Referenced by casacore::MSTimeParse::reset(), casacore::MSUvDistParse::reset(), and casacore::MSSpwParse::reset().
const Vector<T> casacore::Matrix< T >::row | ( | size_t | i | ) | const |
Vector<T> casacore::Matrix< T >::row | ( | size_t | i | ) |
Returns a reference to the i'th row.
void casacore::Matrix< T >::shape | ( | Int & | s1, | |
Int & | s2 | |||
) | const [inline] |
const IPosition& casacore::Matrix< T >::shape | ( | ) | const [inline] |
The length of each axis of the Matrix.
Reimplemented from casacore::ArrayBase.
Definition at line 295 of file Matrix.h.
Referenced by casacore::ImageBeamSet::nchan(), casacore::ImageBeamSet::nstokes(), and casacore::ImageBeamSet::shape().
size_t casacore::Matrix< T >::xinc_p [private] |
Cached constants to improve indexing.
Definition at line 322 of file Matrix.h.
Referenced by casacore::Matrix< Complex >::operator()().
size_t casacore::Matrix< T >::yinc_p [private] |
Definition at line 322 of file Matrix.h.
Referenced by casacore::Matrix< Complex >::operator()().