Brief description of class still missing. More...
#include <MatrixData.h>
Public Member Functions | |
T & | at (int row, int col) |
const T & | at (int row, int col) const |
int | columnCount () const |
void | copyAt (int row, int col, const MatrixData< T > &m) |
const T * | data () const |
T * | data () |
void | fill (const T &v) |
bool | fromString (const StringSection &s) |
void | identity () |
MatrixData () | |
MatrixData (const MatrixData< T > &m) | |
void | mergeColumn (const MatrixData< T > &col1, const MatrixData< T > &col2) |
void | mergeRow (const MatrixData< T > &row1, const MatrixData< T > &row2) |
int | nextNullRow (int startRow) const |
Matrix< T > | operator* (const MatrixData< T > &m) const |
Matrix< T > | operator+ (const MatrixData< T > &m) const |
Matrix< T > | operator- (const MatrixData< T > &m) const |
void | operator= (const MatrixData< T > &m) |
bool | operator== (const MatrixData< T > &m) const |
void | resize (int ndim) |
void | resize (int nrow, int ncol) |
int | rowCount () const |
Matrix< T > | sortedColumns (const PermutationVector &p) |
Matrix< T > | sortedRows (const PermutationVector &p) |
Matrix< T > | subMatrix (int rowStart, int colStart, int rowEnd, int colEnd) const |
void | swapRowColumn () |
QString | toString () const |
QString | toUserString (int precision=6, char format='g') const |
Matrix< T > | transposed () const |
T * | values () |
const T * | values () const |
void | zero () |
~MatrixData () | |
Protected Attributes | |
int | _ncol |
int | _nrow |
T * | _values |
Brief description of class still missing.
Full description of class still missing
QGpCoreTools::MatrixData< T >::MatrixData | ( | ) | [inline] |
QGpCoreTools::MatrixData< T >::MatrixData | ( | const MatrixData< T > & | m | ) | [inline] |
QGpCoreTools::MatrixData< T >::~MatrixData | ( | ) | [inline] |
{ delete [] _values; }
T & QGpCoreTools::MatrixData< T >::at | ( | int | row, |
int | col | ||
) | [inline] |
const T & QGpCoreTools::MatrixData< T >::at | ( | int | row, |
int | col | ||
) | const [inline] |
int QGpCoreTools::MatrixData< T >::columnCount | ( | ) | const [inline] |
References QGpCoreTools::MatrixData< T >::_ncol.
Referenced by QGpCoreTools::MatrixData< T >::copyAt().
{return _ncol;}
void QGpCoreTools::MatrixData< T >::copyAt | ( | int | row, |
int | col, | ||
const MatrixData< T > & | m | ||
) |
References QGpCoreTools::MatrixData< T >::_values, QGpCoreTools::MatrixData< T >::columnCount(), and QGpCoreTools::MatrixData< T >::rowCount().
{ ASSERT(row>=0 && row+m.rowCount()<=rowCount()); ASSERT(col>=0 && col+m.columnCount()<=columnCount()); int mrow=m.rowCount(); int length=sizeof(T)*mrow; T * values=m._values; T * lastValue=values+mrow*m.columnCount(); T * thisValues=_values+row+col*_nrow; while(values<lastValue) { memcpy(thisValues, values, length); values+=mrow; thisValues+=_nrow; } }
const T* QGpCoreTools::MatrixData< T >::data | ( | ) | const [inline] |
References QGpCoreTools::MatrixData< T >::_values.
{return _values;}
T* QGpCoreTools::MatrixData< T >::data | ( | ) | [inline] |
References QGpCoreTools::MatrixData< T >::_values.
{return _values;}
void QGpCoreTools::MatrixData< T >::fill | ( | const T & | v | ) |
bool QGpCoreTools::MatrixData< T >::fromString | ( | const StringSection & | s | ) |
References QGpCoreTools::StringSection::nextNumber().
void QGpCoreTools::MatrixData< T >::identity | ( | ) | [inline] |
void QGpCoreTools::MatrixData< T >::mergeColumn | ( | const MatrixData< T > & | col1, |
const MatrixData< T > & | col2 | ||
) |
void QGpCoreTools::MatrixData< T >::mergeRow | ( | const MatrixData< T > & | row1, |
const MatrixData< T > & | row2 | ||
) |
References QGpCoreTools::MatrixData< T >::_ncol, QGpCoreTools::MatrixData< T >::_nrow, and QGpCoreTools::MatrixData< T >::_values.
{ ASSERT(row1._ncol==row2._ncol); resize(row1._nrow+row2._nrow, row1._ncol); int length1=sizeof(T)*row1._nrow; int length2=sizeof(T)*row2._nrow; T * values=_values; T * lastValue=_values+_nrow*_ncol; T * row1Values=row1._values; T * row2Values=row2._values; while(values<lastValue) { memcpy(values, row1Values, length1); values+=row1._nrow; row1Values+=row1._nrow; memcpy(values, row2Values, length2); values+=row2._nrow; row2Values+=row2._nrow; } }
int QGpCoreTools::MatrixData< T >::nextNullRow | ( | int | startRow | ) | const |
Matrix< T > QGpCoreTools::MatrixData< T >::operator* | ( | const MatrixData< T > & | m | ) | const |
References QGpCoreTools::Matrix< T >::_d, QGpCoreTools::MatrixData< T >::_ncol, QGpCoreTools::MatrixData< T >::_nrow, QGpCoreTools::MatrixData< T >::_values, QGpCoreTools::MatrixMultiply::begin(), QGpCoreTools::AbstractNumericalCache::end(), QGpCoreTools::MatrixMultiply::IndexMap::factor1Index(), QGpCoreTools::MatrixMultiply::IndexMap::factor2Index(), QGpCoreTools::MatrixMultiply::indexCount(), QGpCoreTools::MatrixMultiply::indexMap(), QGpCoreTools::MatrixMultiply::isValid(), QGpCoreTools::MatrixMultiply::IndexMap::resultIndex(), and QGpCoreTools::Matrix< T >::zero().
{ ASSERT(_ncol==m._nrow); Matrix<T> r(_nrow, m._ncol); r.zero(); T * rValues=r._d->_values; const T * thisValues=_values; const T * mValues=m._values; if(MatrixMultiply::isValid(_nrow, _ncol, m._ncol)) { const MatrixMultiply& multiplier=*MatrixMultiply::begin(_nrow, _ncol, m._ncol); int n=multiplier.indexCount(); for(int i=0;i<n;i++) { const MatrixMultiply::IndexMap& index=multiplier.indexMap(i); rValues[index.resultIndex()]+=thisValues[index.factor1Index()]*mValues[index.factor2Index()]; } MatrixMultiply::end(&multiplier); } else { // Slower method because cache would be too big for matrix>256*256 for(int i=0; i<_nrow; i++) { for(int j=0; j<m._ncol; j++) { int resultIndex=i+j*_nrow; int mIndex=j*_ncol; for(int k=0; k<_ncol; k++) { rValues[resultIndex]+=thisValues[i+k*_nrow]*mValues[k+mIndex]; } } } } return r; }
Matrix< T > QGpCoreTools::MatrixData< T >::operator+ | ( | const MatrixData< T > & | m | ) | const |
Matrix< T > QGpCoreTools::MatrixData< T >::operator- | ( | const MatrixData< T > & | m | ) | const |
void QGpCoreTools::MatrixData< T >::operator= | ( | const MatrixData< T > & | m | ) | [inline] |
bool QGpCoreTools::MatrixData< T >::operator== | ( | const MatrixData< T > & | m | ) | const [inline] |
void QGpCoreTools::MatrixData< T >::resize | ( | int | ndim | ) | [inline] |
References QGpCoreTools::MatrixData< T >::resize().
Referenced by QGpCoreTools::Matrix< Complex >::Matrix(), QGpCoreTools::MatrixData< T >::MatrixData(), and QGpCoreTools::MatrixData< T >::resize().
{resize(ndim, ndim);}
void QGpCoreTools::MatrixData< T >::resize | ( | int | nrow, |
int | ncol | ||
) | [inline] |
int QGpCoreTools::MatrixData< T >::rowCount | ( | ) | const [inline] |
References QGpCoreTools::MatrixData< T >::_nrow.
Referenced by QGpCoreTools::MatrixData< T >::copyAt().
{return _nrow;}
Matrix< T > QGpCoreTools::MatrixData< T >::sortedColumns | ( | const PermutationVector & | p | ) |
References QGpCoreTools::Matrix< T >::_d, and QGpCoreTools::PermutationVector::newIndex().
Matrix< T > QGpCoreTools::MatrixData< T >::sortedRows | ( | const PermutationVector & | p | ) |
References QGpCoreTools::Matrix< T >::_d, and QGpCoreTools::PermutationVector::newIndex().
Matrix< T > QGpCoreTools::MatrixData< T >::subMatrix | ( | int | rowStart, |
int | colStart, | ||
int | rowEnd, | ||
int | colEnd | ||
) | const |
References QGpCoreTools::Matrix< T >::_d.
{ ASSERT(rowStart>=0 && rowStart<=rowEnd && rowEnd<_nrow); ASSERT(colStart>=0 && colStart<=colEnd && colEnd<_ncol); int mnrow=rowEnd-rowStart+1; int mncol=colEnd-colStart+1; Matrix<T> m(mnrow, mncol); int length=sizeof(T)*mnrow; T * values=m._d->_values; T * lastValue=values+mnrow*mncol; T * thisValues=_values+rowStart+colStart*_nrow; while(values<lastValue) { memcpy(values, thisValues, length); values+=mnrow; thisValues+=_nrow; } return m; }
void QGpCoreTools::MatrixData< T >::swapRowColumn | ( | ) | [inline] |
QString QGpCoreTools::MatrixData< T >::toString | ( | ) | const |
References str, and QGpCoreTools::Number::toString().
QString QGpCoreTools::MatrixData< T >::toUserString | ( | int | precision = 6 , |
char | format = 'g' |
||
) | const |
References str, and QGpCoreTools::Number::toDouble().
{ QString str(" | "); for(int j=0; j<_ncol; j++) { str+=QString(" %1 |").arg(j, 12, 10, QChar(' ')); } str+="\n----|-"; for(int j=0; j<_ncol; j++) { str+="--------------|"; } str+="\n"; for(int i=0; i<_nrow; i++) { str+=QString("%1 | ").arg(i, 3, 10, QChar(' ')); for(int j=0; j<_ncol; j++) { str+=QString(" %1 |").arg(Number::toDouble(at(i, j)), 12, format, precision, QChar(' ')); } str+="\n"; } str+="----|-"; for(int j=0; j<_ncol; j++) { str+="--------------|"; } str+="\n"; return str; }
Matrix< T > QGpCoreTools::MatrixData< T >::transposed | ( | ) | const |
T* QGpCoreTools::MatrixData< T >::values | ( | ) | [inline] |
References QGpCoreTools::MatrixData< T >::_values.
{return _values;}
const T* QGpCoreTools::MatrixData< T >::values | ( | ) | const [inline] |
References QGpCoreTools::MatrixData< T >::_values.
{return _values;}
void QGpCoreTools::MatrixData< T >::zero | ( | ) | [inline] |
int QGpCoreTools::MatrixData< T >::_ncol [protected] |
Referenced by QGpCoreTools::MatrixData< T >::columnCount(), QGpCoreTools::MatrixData< T >::MatrixData(), QGpCoreTools::MatrixData< T >::mergeColumn(), QGpCoreTools::MatrixData< T >::mergeRow(), QGpCoreTools::MatrixData< T >::operator*(), QGpCoreTools::MatrixData< T >::operator+(), QGpCoreTools::MatrixData< T >::operator-(), QGpCoreTools::MatrixData< T >::operator=(), and QGpCoreTools::MatrixData< T >::operator==().
int QGpCoreTools::MatrixData< T >::_nrow [protected] |
Referenced by QGpCoreTools::MatrixData< T >::MatrixData(), QGpCoreTools::MatrixData< T >::mergeColumn(), QGpCoreTools::MatrixData< T >::mergeRow(), QGpCoreTools::MatrixData< T >::operator*(), QGpCoreTools::MatrixData< T >::operator+(), QGpCoreTools::MatrixData< T >::operator-(), QGpCoreTools::MatrixData< T >::operator=(), QGpCoreTools::MatrixData< T >::operator==(), and QGpCoreTools::MatrixData< T >::rowCount().
T* QGpCoreTools::MatrixData< T >::_values [protected] |
Referenced by QGpCoreTools::MatrixData< T >::copyAt(), QGpCoreTools::MatrixData< T >::data(), QGpCoreTools::MatrixData< T >::MatrixData(), QGpCoreTools::MatrixData< T >::mergeColumn(), QGpCoreTools::MatrixData< T >::mergeRow(), QGpCoreTools::MatrixData< T >::operator*(), QGpCoreTools::MatrixData< T >::operator+(), QGpCoreTools::MatrixData< T >::operator-(), QGpCoreTools::MatrixData< T >::operator=(), QGpCoreTools::MatrixData< T >::operator==(), and QGpCoreTools::MatrixData< T >::values().