ARTS 2.5.4 (git: 31ce4f0e)
Matrix Class Reference

The Matrix class. More...

#include <matpackI.h>

Inheritance diagram for Matrix:
MatrixView ConstMatrixView

Public Member Functions

 Matrix ()=default
 
 Matrix (Index r, Index c)
 Constructor setting size. More...
 
 Matrix (Index r, Index c, Numeric fill)
 Constructor setting size and filling with constant value. More...
 
 Matrix (const ConstMatrixView &m)
 Copy constructor from MatrixView. More...
 
 Matrix (const Matrix &m)
 Copy constructor from Matrix. More...
 
 Matrix (Matrix &&v) noexcept
 
 Matrix (const matpack::matrix_like auto &init)
 Initialization from a vector type. More...
 
 Matrix (Numeric *d, const Range &r0, const Range &r1) ARTS_NOEXCEPT
 
Matrixoperator= (const Matrix &m)
 Assignment operator from another matrix. More...
 
Matrixoperator= (Matrix &&m) noexcept
 Move assignment operator from another matrix. More...
 
Matrixoperator= (Numeric x)
 Assignment operator from scalar. More...
 
Matrixoperator= (const ConstVectorView &v)
 Assignment from a vector. More...
 
void resize (Index r, Index c)
 Resize function. More...
 
virtual ~Matrix ()
 Destructor for Matrix. More...
 
template<std::size_t dim0>
Vector reduce_rank () &&ARTS_NOEXCEPT
 
Numericget_raw_data () ARTS_NOEXCEPT
 
template<class F >
void transform_elementwise (F &&func)
 
- Public Member Functions inherited from MatrixView
constexpr MatrixView (const MatrixView &)=default
 
Numericoperator() (Index r, Index c) ARTS_NOEXCEPT
 Plain index operator. More...
 
Numericget (Index r, Index c) ARTS_NOEXCEPT
 Get element implementation without assertions. More...
 
MatrixView operator() (const Range &r, const Range &c) ARTS_NOEXCEPT
 Index operator for subrange. More...
 
VectorView operator() (const Range &r, Index c) ARTS_NOEXCEPT
 Index operator returning a column as an object of type VectorView. More...
 
VectorView operator() (Index r, const Range &c) ARTS_NOEXCEPT
 Index operator returning a row as an object of type VectorView. More...
 
Iterator2D begin () ARTS_NOEXCEPT
 ‍** Return const iterator to first row. Has to be redefined here, since it is More...
 
Iterator2D end () ARTS_NOEXCEPT
 Return iterator behind last row. More...
 
MatrixViewoperator= (const ConstMatrixView &m)
 Assignment operator. More...
 
MatrixViewoperator= (const MatrixView &m)
 Assignment from MatrixView to MatrixView. More...
 
MatrixViewoperator= (const Matrix &m)
 Assignment from a Matrix. More...
 
MatrixViewoperator= (const ConstVectorView &m)
 Assignment from a vector. More...
 
MatrixViewoperator= (Numeric x)
 Assigning a scalar to a MatrixView will set all elements to this value. More...
 
MatrixViewoperator*= (Numeric x) ARTS_NOEXCEPT
 Multiplication by scalar. More...
 
MatrixViewoperator/= (Numeric x) ARTS_NOEXCEPT
 Division by scalar. More...
 
MatrixViewoperator+= (Numeric x) ARTS_NOEXCEPT
 Addition of scalar. More...
 
MatrixViewoperator-= (Numeric x) ARTS_NOEXCEPT
 Subtraction of scalar. More...
 
MatrixViewoperator*= (const ConstMatrixView &x) ARTS_NOEXCEPT
 Element-vise multiplication by another Matrix. More...
 
MatrixViewoperator/= (const ConstMatrixView &x) ARTS_NOEXCEPT
 Element-vise division by another Matrix. More...
 
MatrixViewoperator+= (const ConstMatrixView &x) ARTS_NOEXCEPT
 Element-vise addition of another Matrix. More...
 
MatrixViewoperator-= (const ConstMatrixView &x) ARTS_NOEXCEPT
 Element-vise subtraction of another Matrix. More...
 
MatrixViewoperator*= (const ConstVectorView &x) ARTS_NOEXCEPT
 Element-vise multiplication by a Vector (acting like a 1-column Matrix). More...
 
MatrixViewoperator/= (const ConstVectorView &x) ARTS_NOEXCEPT
 Element-vise division by a Vector (acting like a 1-column Matrix). More...
 
MatrixViewoperator+= (const ConstVectorView &x) ARTS_NOEXCEPT
 Element-vise addition of a Vector (acting like a 1-column Matrix). More...
 
MatrixViewoperator-= (const ConstVectorView &x) ARTS_NOEXCEPT
 Element-vise subtraction of a Vector (acting like a 1-column Matrix). More...
 
virtual ~MatrixView ()=default
 Destructor. More...
 
ConstIterator2D begin () const ARTS_NOEXCEPT
 Return const iterator to first row. More...
 
ConstIterator2D end () const ARTS_NOEXCEPT
 Return const iterator behind last row. More...
 
Numeric get (Index r, Index c) const ARTS_NOEXCEPT
 Get element implementation without assertions. More...
 
- Public Member Functions inherited from ConstMatrixView
constexpr ConstMatrixView (const ConstMatrixView &)=default
 
constexpr ConstMatrixView (ConstMatrixView &&)=default
 
ConstMatrixViewoperator= (const ConstMatrixView &)=default
 
ConstMatrixViewoperator= (ConstMatrixView &&)=default
 
Index selem () const noexcept
 
Index nrows () const noexcept
 
Index ncols () const noexcept
 
Index drows () const noexcept
 
Index dcols () const noexcept
 
Index size () const noexcept
 
bool empty () const noexcept
 
Shape< 2 > shape () const
 
Numeric operator() (Index r, Index c) const ARTS_NOEXCEPT
 Plain const index operator. More...
 
Numeric get (Index r, Index c) const ARTS_NOEXCEPT
 Get element implementation without assertions. More...
 
ConstMatrixView operator() (const Range &r, const Range &c) const ARTS_NOEXCEPT
 Const index operator for subrange. More...
 
ConstVectorView operator() (const Range &r, Index c) const ARTS_NOEXCEPT
 Const index operator returning a column as an object of type ConstVectorView. More...
 
ConstVectorView operator() (Index r, const Range &c) const ARTS_NOEXCEPT
 Const index operator returning a row as an object of type ConstVectorView. More...
 
ConstIterator2D begin () const ARTS_NOEXCEPT
 Return const iterator to first row. More...
 
ConstIterator2D end () const ARTS_NOEXCEPT
 Return const iterator behind last row. More...
 
ConstVectorView diagonal () const ARTS_NOEXCEPT
 Matrix diagonal as vector. More...
 
virtual ~ConstMatrixView ()=default
 Destructor. More...
 
Numericget_c_array () const noexcept
 

Friends

void swap (Matrix &m1, Matrix &m2)
 Swaps two objects. More...
 

Additional Inherited Members

- Public Types inherited from MatrixView
using iterator = Iterator2D
 
- Public Types inherited from ConstMatrixView
using const_iterator = ConstIterator2D
 
- Protected Member Functions inherited from MatrixView
 MatrixView ()=default
 
 MatrixView (Numeric *data, const Range &rr, const Range &cr) ARTS_NOEXCEPT
 Explicit constructor. More...
 
 MatrixView (Numeric *data, const Range &pr, const Range &pc, const Range &nr, const Range &nc) ARTS_NOEXCEPT
 Recursive constructor. More...
 
- Protected Member Functions inherited from ConstMatrixView
 ConstMatrixView ()=default
 
 ConstMatrixView (Numeric *data, const Range &r, const Range &c) ARTS_NOEXCEPT
 Explicit constructor. More...
 
 ConstMatrixView (Numeric *data, const Range &pr, const Range &pc, const Range &nr, const Range &nc) ARTS_NOEXCEPT
 Recursive constructor. More...
 
- Protected Attributes inherited from ConstMatrixView
Range mrr {0, 0, 1}
 The row range of mdata that is actually used. More...
 
Range mcr {0, 0, 1}
 The column range of mdata that is actually used. More...
 
Numericmdata {nullptr}
 Pointer to the plain C array that holds the data. More...
 

Detailed Description

The Matrix class.

This is a MatrixView that also allocates storage automatically, and deallocates it when it is destroyed. We take all the functionality from MatrixView. Additionally defined here are:

  1. Constructors and destructor.
  2. Assignment operator from scalar.
  3. Resize function.

Definition at line 1261 of file matpackI.h.

Constructor & Destructor Documentation

◆ Matrix() [1/8]

Matrix::Matrix ( )
default

◆ Matrix() [2/8]

Matrix::Matrix ( Index  r,
Index  c 
)

Constructor setting size.

This constructor has to set the stride in the row range correctly!

Definition at line 898 of file matpackI.cc.

◆ Matrix() [3/8]

Matrix::Matrix ( Index  r,
Index  c,
Numeric  fill 
)

Constructor setting size and filling with constant value.

Definition at line 904 of file matpackI.cc.

References c, and ConstMatrixView::mdata.

◆ Matrix() [4/8]

Matrix::Matrix ( const ConstMatrixView m)

Copy constructor from MatrixView.

This automatically sets the size and copies the data.

Definition at line 913 of file matpackI.cc.

References MatrixView::begin(), ConstMatrixView::begin(), copy(), and ConstMatrixView::end().

◆ Matrix() [5/8]

Matrix::Matrix ( const Matrix m)

Copy constructor from Matrix.

This automatically sets the size and copies the data.

Definition at line 922 of file matpackI.cc.

References ConstMatrixView::mdata, ConstMatrixView::ncols(), and ConstMatrixView::nrows().

◆ Matrix() [6/8]

Matrix::Matrix ( Matrix &&  v)
inlinenoexcept

Definition at line 1269 of file matpackI.h.

References v.

◆ Matrix() [7/8]

Matrix::Matrix ( const matpack::matrix_like auto &  init)
inlineexplicit

Initialization from a vector type.

Definition at line 1274 of file matpackI.h.

◆ Matrix() [8/8]

Matrix::Matrix ( Numeric d,
const Range r0,
const Range r1 
)
inline

Construct from known data

Note that this will call delete on the pointer if it is still valid at the end of the lifetime of this variable

Parameters
[in]d- A pointer to some raw data
[in]r0- The Range along the first dimension
[in]r1- The Range along the second dimension

Definition at line 1287 of file matpackI.h.

References ARTS_ASSERT, and IGRF::r0.

◆ ~Matrix()

Matrix::~Matrix ( )
virtual

Destructor for Matrix.

This is important, since Matrix uses new to allocate storage.

Definition at line 1037 of file matpackI.cc.

References ConstMatrixView::mdata.

Member Function Documentation

◆ get_raw_data()

Numeric * Matrix::get_raw_data ( )
inline

Definition at line 1326 of file matpackI.h.

References ConstVectorView::mdata.

◆ operator=() [1/4]

Matrix & Matrix::operator= ( const ConstVectorView v)

Assignment from a vector.

This copies the data from a VectorView to this MatrixView.

The dimension is adjusted automatically.

Parameters
vThe vector to assign to this matrix.
Returns
This matrix, by tradition.
Author
Stefan Buehler
Date
2002-12-19

Definition at line 1000 of file matpackI.cc.

References MatrixView::begin(), ConstMatrixView::begin(), copy(), ConstMatrixView::end(), resize(), and v.

◆ operator=() [2/4]

Matrix & Matrix::operator= ( const Matrix m)

Assignment operator from another matrix.

While dimensions of MatrixViews can not be adjusted, dimensions of matrices can be adjusted. Hence, the behavior of the assignment operator is different.

In this case the size of the target is automatically adjusted. This is important, so that structures containing matrices are copied correctly.

This is a deviation from the old ARTS paradigm that sizes must match exactly before copying!

Note: It is sufficient to have only this one version of the assignment (Matrix = Matrix). It implicitly covers the cases Matrix=MatrixView, etc, because there is a default constructor for Matrix from MatrixView. (See C++ Primer Plus, page 571ff.)

Parameters
mThe other matrix to assign to this one.
Returns
This matrix, by tradition.
Author
Stefan Buehler
Date
2002-12-19

Definition at line 958 of file matpackI.cc.

References ConstMatrixView::mdata, ConstMatrixView::ncols(), ConstMatrixView::nrows(), and resize().

◆ operator=() [3/4]

Matrix & Matrix::operator= ( Matrix &&  m)
noexcept

Move assignment operator from another matrix.

Definition at line 967 of file matpackI.cc.

References ConstMatrixView::mdata.

◆ operator=() [4/4]

Matrix & Matrix::operator= ( Numeric  x)

Assignment operator from scalar.

Assignment operators also seem to be not inherited.

Definition at line 982 of file matpackI.cc.

References ConstMatrixView::mdata, ConstMatrixView::ncols(), and ConstMatrixView::nrows().

◆ reduce_rank()

template<std::size_t dim0>
Vector Matrix::reduce_rank ( ) &&
inline

Reduce a Matrix to a Vector and leave this in an empty state

Definition at line 1310 of file matpackI.h.

References ARTS_ASSERT, ConstVectorView::mdata, IGRF::r0, and ConstVectorView::size().

◆ resize()

void Matrix::resize ( Index  r,
Index  c 
)

Resize function.

If the size is already correct this function does nothing. All data is lost after resizing! The new Matrix is not initialized, so it will contain random values.

Definition at line 1010 of file matpackI.cc.

References ARTS_ASSERT, c, ConstMatrixView::mcr, ConstMatrixView::mdata, Range::mextent, ConstMatrixView::mrr, Range::mstart, and Range::mstride.

Referenced by AbsInputFromRteScalars(), GasAbsLookup::Adapt(), AddZaAa(), ampmat_to_phamat(), AntennaConstantGaussian1D(), AntennaMultiBeamsToPencilBeams(), AntennaOff(), Append(), cloudboxOff(), complex_n_ice_matzler06(), complex_n_water_liebe93(), DiagonalMatrix(), DiffZaAa(), GasAbsLookup::Extract(), FastemStandAlone(), get_direct_radiation(), get_ppath_atmvars(), get_ppath_cloudvars(), get_ppath_f(), get_refr_index_2d(), get_refr_index_3d(), get_star_background(), insert_elements(), integrate_phamat_alpha10(), integrate_phamat_alpha6(), integrate_phamat_theta0_phi10(), integrate_phamat_theta0_phi_alpha6(), interp_atmfield_gp2itw(), interp_atmsurface_gp2itw(), IntersectionGeometricalWithAltitude(), iy_transmittance_mult(), iy_transmitterMultiplePol(), iy_transmitterSinglePol(), iyb_calc(), iyClearsky(), iyEmissionHybrid(), iyEmissionStandard(), iyIndependentBeamApproximation(), iyInterpCloudboxField(), iyLoopFrequencies(), iyMC(), iyRadarSingleScat(), iySurfaceInit(), iySurfaceLambertian(), iyTransmissionStandard(), jacobianFromYbatch(), Matrix1ColFromVector(), Matrix1RowFromVector(), Matrix2ColFromVectors(), Matrix2RowFromVectors(), Matrix3ColFromVectors(), Matrix3RowFromVectors(), MatrixAdd(), MatrixCBR(), MatrixCopySparse(), MatrixDivide(), MatrixExtractFromTensor3(), MatrixIdentity(), MatrixMultiply(), MatrixPlanck(), MatrixSetConstant(), MatrixSubtract(), MatrixUnitIntensity(), mblock_dlos_gridUniformRectangular(), mueller_modif2stokes(), mueller_rotation(), mueller_stokes2modif(), nca_get_data_Matrix(), nca_read_from_file(), operator=(), opt_prop_NScatElems(), ArtsParser::parse_matrix(), particle_bulkpropRadarOnionPeeling(), particle_massesFromMetaData(), particle_massesFromMetaDataSingleCategory(), pha_mat_NScatElems(), pndFromPsd(), pndFromPsdBasic(), ppath_init_structure(), psd_MY05(), psd_SB06(), psdMilbrandtYau05(), psdSeifertBeheng06(), TelsemAtlas::read(), Reduce(), regrid_atmsurf_by_gp(), regrid_atmsurf_by_gp_oem(), GriddedField2::resize(), rslope_crossing2d(), rslope_crossing3d(), run_cdisort_flux(), sensor_aux_vectors(), sensor_losGeometricFromSensorPosToOtherPositions(), sensor_poslosFromECEF(), sensor_poslosFromGeodetic(), sensor_responseMetMM(), surface_get_incoming_direct(), surfaceBlackbody(), surfaceFastem(), surfaceFlatReflectivity(), surfaceFlatRefractiveIndex(), surfaceFlatRvRh(), surfaceFlatScalarReflectivity(), surfaceLambertianSimple(), surfaceMapToLinearPolarisation(), surfaceSemiSpecularBy3beams(), surfaceSplitSpecularTo3beams(), telsemStandalone(), tessem_read_ascii(), test_dense_sparse_multiplication(), test_identity(), test_insert_row(), test_sparse_dense_multiplication(), test_workspace_methods(), xml_read_from_stream(), yApplySensorPol(), ybatchMetProfiles(), ybatchMetProfilesClear(), yCalc(), yCalcAppend(), yRadar(), and za_gridOpt().

◆ transform_elementwise()

template<class F >
void Matrix::transform_elementwise ( F &&  func)
inline

Definition at line 1329 of file matpackI.h.

References ConstVectorView::mdata, ConstVectorView::size(), and transform().

Friends And Related Function Documentation

◆ swap

void swap ( Matrix m1,
Matrix m2 
)
friend

Swaps two objects.

Definition at line 1029 of file matpackI.cc.


The documentation for this class was generated from the following files: