Image Component Library (ICL)
|
Highly flexible and optimized matrix class implementation. More...
#include <DynMatrix.h>
Classes | |
struct | col_iterator |
Internal column iterator struct (using height-stride) More... | |
class | DynMatrixColumn |
Internally used Utility structure referencing a matrix column shallowly. More... | |
Public Types | |
typedef T * | iterator |
default iterator type (just a data-pointer) More... | |
typedef const T * | const_iterator |
dafault const_iterator type (just a data-pointer) More... | |
typedef T * | row_iterator |
comples row_iterator type More... | |
typedef const T * | const_row_iterator |
complex const_row_iterator type More... | |
typedef const col_iterator | const_col_iterator |
const column iterator typedef More... | |
typedef void(* | GESDD) (const char *, const int *, const int *, T *, const int *, T *, T *, const int *, T *, const int *, T *, const int *, int *, int *) |
typedef void(* | CBLAS_GEMM) (CBLAS_ORDER, CBLAS_TRANSPOSE, CBLAS_TRANSPOSE, int, int, int, T, const T *, int, const T *, int, T, T *, int) |
Public Member Functions | |
DynMatrix (const DynMatrixColumn &column) | |
creates a column matrix from given column of other matrix More... | |
DynMatrix () | |
Default empty constructor creates a null-matrix. More... | |
DynMatrix (unsigned int cols, unsigned int rows, const T &initValue=0) | |
Create a dyn matrix with given dimensions (and optional initialValue) More... | |
DynMatrix (unsigned int cols, unsigned int rows, T *data, bool deepCopy=true) | |
Create a matrix with given data. More... | |
DynMatrix (unsigned int cols, unsigned int rows, const T *data) | |
Create a matrix with given data (const version: deepCopy only) More... | |
DynMatrix (const DynMatrix &other) | |
Default copy constructor. More... | |
DynMatrix (const std::string &filename) | |
creates a new DynMatrix from given csv filename More... | |
void | saveCSV (const std::string &filename) |
writes the current matrix to a csv file More... | |
bool | isNull () const |
returns with this matrix has a valid data pointer More... | |
~DynMatrix () | |
Destructor (deletes data if no wrapped shallowly) More... | |
DynMatrix & | operator= (const DynMatrix &other) |
Assignment operator (using deep/shallow-copy) More... | |
void | setBounds (unsigned int cols, unsigned int rows, bool holdContent=false, const T &initializer=0) |
resets matrix dimensions More... | |
bool | isSimilar (const DynMatrix &other, T tollerance=T(0.0001)) const |
tests weather a matrix is enough similar to another matrix More... | |
bool | operator== (const DynMatrix &other) const |
elementwise comparison (==) More... | |
bool | operator!= (const DynMatrix &other) const |
elementwise comparison (!=) More... | |
DynMatrix | operator * (T f) const |
Multiply elements with scalar. More... | |
DynMatrix & | mult (T f, DynMatrix &dst) const |
Multiply elements with scalar (in source destination fashion) More... | |
DynMatrix & | operator *= (T f) |
Multiply elements with scalar (inplace) More... | |
DynMatrix | operator/ (T f) const |
Device elements by scalar. More... | |
DynMatrix & | operator/= (T f) |
Device elements by scalar (inplace) More... | |
DynMatrix & | mult (const DynMatrix &m, DynMatrix &dst) const |
Matrix multiplication (in source destination fashion) [IPP-Supported]. More... | |
DynMatrix & | elementwise_mult (const DynMatrix &m, DynMatrix &dst) const |
Elementwise matrix multiplication (in source destination fashion) [IPP-Supported]. More... | |
DynMatrix | elementwise_mult (const DynMatrix &m) const |
Elementwise matrix multiplication (without destination matrix) [IPP-Supported]. More... | |
DynMatrix & | elementwise_div (const DynMatrix &m, DynMatrix &dst) const |
Elementwise division (in source destination fashion) [IPP-Supported]. More... | |
DynMatrix | elementwise_div (const DynMatrix &m) const |
Elementwise matrix multiplication (without destination matrix) [IPP-Supported]. More... | |
DynMatrix | operator * (const DynMatrix &m) const |
Essential matrix multiplication [IPP-Supported]. More... | |
DynMatrix & | operator *= (const DynMatrix &m) |
inplace matrix multiplication applying this = this*m [IPP-Supported] More... | |
DynMatrix | operator/ (const DynMatrix &m) const |
inplace matrix devision (calling this/m.inv()) [IPP-Supported] More... | |
DynMatrix & | operator/= (const DynMatrix &m) const |
inplace matrix devision (calling this/m.inv()) (inplace) More... | |
DynMatrix | operator+ (const T &t) const |
adds a scalar to each element More... | |
DynMatrix | operator- (const T &t) const |
substacts a scalar from each element More... | |
DynMatrix & | operator+= (const T &t) |
adds a scalar to each element (inplace) More... | |
DynMatrix & | operator-= (const T &t) |
substacts a scalar from each element (inplace) More... | |
DynMatrix | operator+ (const DynMatrix &m) const |
Matrix addition. More... | |
DynMatrix | operator- (const DynMatrix &m) const |
Matrix substraction. More... | |
DynMatrix & | operator+= (const DynMatrix &m) |
Matrix addition (inplace) More... | |
DynMatrix & | operator-= (const DynMatrix &m) |
Matrix substraction (inplace) More... | |
T & | operator() (unsigned int col, unsigned int row) |
element access operator (x,y)-access index begin 0! More... | |
const T & | operator() (unsigned int col, unsigned int row) const |
element access operator (x,y)-access index begin 0! (const) More... | |
T & | at (unsigned int col, unsigned int row) |
element access with index check More... | |
const T & | at (unsigned int col, unsigned int row) const |
element access with index check (const) More... | |
T & | operator[] (unsigned int idx) |
linear access to actual data array More... | |
const T & | operator[] (unsigned int idx) const |
linear access to actual data array (const) More... | |
T | norm (double l=2) const |
applies an L_l norm on the matrix elements (all elements are treated as vector) More... | |
T | sqrDistanceTo (const DynMatrix &other) const |
returns the squared distance of the inner data vectors (linearly interpreted) (IPP accelerated) More... | |
T | distanceTo (const DynMatrix &other) const |
returns the distance of the inner data vectors (linearly interpreted) (IPP accelerated) More... | |
unsigned int | rows () const |
height of the matrix (number of rows) More... | |
unsigned int | cols () const |
width of the matrix (number of columns) More... | |
T * | data () |
internal data pointer More... | |
const T * | data () const |
internal data pointer (const) More... | |
unsigned int | dim () const |
matrix dimension (width*height) or (cols*rows) More... | |
int | stride0 () const |
returns sizeof (T)*dim() More... | |
int | stride1 () const |
returns sizeof(T)*cols() More... | |
int | stride2 () const |
returns sizeof (T) More... | |
DynMatrix & | operator= (const DynMatrixColumn &col) |
iterator | begin () |
returns an iterator to the begin of internal data array More... | |
iterator | end () |
returns an iterator to the end of internal data array More... | |
const_iterator | begin () const |
returns an iterator to the begin of internal data array (const) More... | |
const_iterator | end () const |
returns an iterator to the end of internal data array (const) More... | |
col_iterator | col_begin (unsigned int col) |
returns an iterator running through a certain matrix column More... | |
col_iterator | col_end (unsigned int col) |
returns an iterator end of a certain matrix column More... | |
const_col_iterator | col_begin (unsigned int col) const |
returns an iterator running through a certain matrix column (const) More... | |
const_col_iterator | col_end (unsigned int col) const |
returns an iterator end of a certain matrix column (const) More... | |
row_iterator | row_begin (unsigned int row) |
returns an iterator running through a certain matrix row More... | |
row_iterator | row_end (unsigned int row) |
returns an iterator of a certains row's end More... | |
const_row_iterator | row_begin (unsigned int row) const |
returns an iterator running through a certain matrix row (const) More... | |
const_row_iterator | row_end (unsigned int row) const |
returns an iterator of a certains row's end (const) More... | |
DynMatrix | row (int row) |
Extracts a shallow copied matrix row. More... | |
const DynMatrix | row (int row) const |
Extracts a shallow copied matrix row (const) More... | |
DynMatrixColumn | col (int col) |
Extracts a shallow copied matrix column. More... | |
const DynMatrixColumn | col (int col) const |
void | decompose_QR (DynMatrix &Q, DynMatrix &R) const |
applies QR-decomposition using stabilized Gram-Schmidt orthonormalization (only for icl32f and icl64f) More... | |
void | decompose_RQ (DynMatrix &R, DynMatrix &Q) const |
applies RQ-decomposition (by exploiting implemnetation of QR-decomposition) (only for icl32f, and icl64f) More... | |
void | decompose_LU (DynMatrix &L, DynMatrix &U, T zeroThreshold=T(1E-16)) const |
applies LU-decomposition (without using partial pivoting) (only for icl32f and icl64f) More... | |
DynMatrix | solve_upper_triangular (const DynMatrix &b) const |
solves Mx=b for M=*this (only if M is a squared upper triangular matrix) (only for icl32f and icl64f) More... | |
DynMatrix | solve_lower_triangular (const DynMatrix &b) const |
solves Mx=b for M=*this (only if M is a squared lower triangular matrix) (only for icl32f and icl64f) More... | |
DynMatrix | solve (const DynMatrix &b, const std::string &method="lu", T zeroThreshold=T(1E-16)) |
solves Mx=b for M=*this (only for icl32f and icl64f) More... | |
DynMatrix | inv () const |
invert the matrix (only for icl32f and icl64f) More... | |
void | eigen (DynMatrix &eigenvectors, DynMatrix &eigenvalues) const |
Extracts the matrix's eigenvalues and eigenvectors. More... | |
void | svd (DynMatrix &U, DynMatrix &S, DynMatrix &V) const |
Computes Singular Value Decomposition of a matrix - decomposes A into USV'. More... | |
DynMatrix | pinv (bool useSVD=false, T zeroThreshold=T(1E-16)) const |
calculates the Moore-Penrose pseudo-inverse (only implemented for icl32f and icl64f) More... | |
DynMatrix | big_matrix_pinv (T zeroThreshold=T(1E-16)) const |
calculates the Moore-Penrose pseudo-inverse (specialized for big matrices) More... | |
DynMatrix | big_matrix_pinv (T zeroThreshold, GESDD gesdd, CBLAS_GEMM cblas_gemm) const |
T | det () const |
matrix determinant (only for icl32f and icl64f) More... | |
DynMatrix | transp () const |
matrix transposed More... | |
const DynMatrix< T > | shallowTransposed () const |
returns a shallow transposed copy of this matrix (dimensions are swapped, data is not re-aranged) (const) More... | |
const DynMatrix< T > | shallowTransposed () |
returns a shallow transposed copy of this matrix (dimensions are swapped, data is not re-aranged) More... | |
void | reshape (int newCols, int newRows) |
resets the matrix dimensions without changing the content More... | |
T | element_wise_inner_product (const DynMatrix< T > &other) const |
inner product of data pointers (not matrix-mulitiplication) More... | |
DynMatrix< T > | dot (const DynMatrix< T > &M) const |
returns the inner product of two matrices (i.e. dot-product) More... | |
DynMatrix< T > | diag () const |
returns diagonal-elements as column-vector More... | |
T | trace () const |
computes the sum of all diagonal elements More... | |
T | cond (const double p=2) const |
computes the condition of a matrix More... | |
T * | set_data (T *newData) |
sets new data internally and returns old data pointer (for experts only!) More... | |
Static Public Member Functions | |
static DynMatrix< T > | loadCSV (const std::string &filename) |
loads a dynmatrix from given CSV file More... | |
static DynMatrix< T > | cross (const DynMatrix< T > &x, const DynMatrix< T > &y) |
computes the cross product More... | |
static DynMatrix | id (unsigned int dim) |
creates a dim-D identity Matrix More... | |
Private Member Functions | |
void | row_check (unsigned int row) const |
void | col_check (unsigned int col) const |
void | idx_check (unsigned int col, unsigned int row) const |
void | idx_check (unsigned int idx) const |
Private Attributes | |
int | m_rows |
int | m_cols |
T * | m_data |
bool | m_ownData |
Highly flexible and optimized matrix class implementation.
In contrast to the FixedMatrix template class, the DynMatrix instances are dynamically sized at runtime The template class is instantiated for the common ICL types uint8_t, int16_t, int32_t, float and double
typedef void(* icl::math::DynMatrix< T >::CBLAS_GEMM) (CBLAS_ORDER, CBLAS_TRANSPOSE, CBLAS_TRANSPOSE, int, int, int, T, const T *, int, const T *, int, T, T *, int) |
typedef const col_iterator icl::math::DynMatrix< T >::const_col_iterator |
const column iterator typedef
typedef const T* icl::math::DynMatrix< T >::const_iterator |
dafault const_iterator type (just a data-pointer)
typedef const T* icl::math::DynMatrix< T >::const_row_iterator |
complex const_row_iterator type
typedef void(* icl::math::DynMatrix< T >::GESDD) (const char *, const int *, const int *, T *, const int *, T *, T *, const int *, T *, const int *, T *, const int *, int *, int *) |
typedef T* icl::math::DynMatrix< T >::iterator |
default iterator type (just a data-pointer)
typedef T* icl::math::DynMatrix< T >::row_iterator |
comples row_iterator type
icl::math::DynMatrix< T >::DynMatrix | ( | const DynMatrixColumn & | column | ) |
creates a column matrix from given column of other matrix
|
inline |
Default empty constructor creates a null-matrix.
|
inline |
Create a dyn matrix with given dimensions (and optional initialValue)
|
inline |
Create a matrix with given data.
Data can be wrapped deeply or shallowly. If the latter is true, given data pointer will not be released in the destructor
|
inline |
Create a matrix with given data (const version: deepCopy only)
|
inline |
Default copy constructor.
|
inline |
creates a new DynMatrix from given csv filename
|
inline |
Destructor (deletes data if no wrapped shallowly)
|
inline |
element access with index check
|
inline |
element access with index check (const)
|
inline |
returns an iterator to the begin of internal data array
|
inline |
returns an iterator to the begin of internal data array (const)
DynMatrix icl::math::DynMatrix< T >::big_matrix_pinv | ( | T | zeroThreshold = T(1E-16) | ) | const |
calculates the Moore-Penrose pseudo-inverse (specialized for big matrices)
Calculate pseudo inverse of given matrix using Intel MKL if possible. Based on singular value decomposition (SVD) and divide & conquer.
zeroThreshold | singular values below threshold are set to zero |
DynMatrix icl::math::DynMatrix< T >::big_matrix_pinv | ( | T | zeroThreshold, |
GESDD | gesdd, | ||
CBLAS_GEMM | cblas_gemm | ||
) | const |
|
inline |
Extracts a shallow copied matrix column.
|
inline |
|
inline |
returns an iterator running through a certain matrix column
|
inline |
returns an iterator running through a certain matrix column (const)
|
inlineprivate |
|
inline |
returns an iterator end of a certain matrix column
|
inline |
returns an iterator end of a certain matrix column (const)
|
inline |
width of the matrix (number of columns)
|
inline |
computes the condition of a matrix
|
inlinestatic |
computes the cross product
|
inline |
internal data pointer
|
inline |
internal data pointer (const)
void icl::math::DynMatrix< T >::decompose_LU | ( | DynMatrix< T > & | L, |
DynMatrix< T > & | U, | ||
T | zeroThreshold = T(1E-16) |
||
) | const |
applies LU-decomposition (without using partial pivoting) (only for icl32f and icl64f)
Even though, implementation also works for non-sqared matrices, it's not recommended to apply this function on non-sqared matrices
void icl::math::DynMatrix< T >::decompose_QR | ( | DynMatrix< T > & | Q, |
DynMatrix< T > & | R | ||
) | const |
applies QR-decomposition using stabilized Gram-Schmidt orthonormalization (only for icl32f and icl64f)
void icl::math::DynMatrix< T >::decompose_RQ | ( | DynMatrix< T > & | R, |
DynMatrix< T > & | Q | ||
) | const |
applies RQ-decomposition (by exploiting implemnetation of QR-decomposition) (only for icl32f, and icl64f)
T icl::math::DynMatrix< T >::det | ( | ) | const |
matrix determinant (only for icl32f and icl64f)
|
inline |
returns diagonal-elements as column-vector
|
inline |
matrix dimension (width*height) or (cols*rows)
|
inline |
returns the distance of the inner data vectors (linearly interpreted) (IPP accelerated)
|
inline |
returns the inner product of two matrices (i.e. dot-product)
A.dot(B) is equivalent to A.transp() * B TODO: optimize implementation (current implementation is A.transp() * B)
void icl::math::DynMatrix< T >::eigen | ( | DynMatrix< T > & | eigenvectors, |
DynMatrix< T > & | eigenvalues | ||
) | const |
Extracts the matrix's eigenvalues and eigenvectors.
This function only works on squared symmetric matrices. Resulting eigenvalues are ordered in descending order. The destination matrices' sizes are adapted automatically.
The function is only available for icl32f and icl64f and it is IPP-accelerated in case of having Intel-IPP-Support. The Fallback implementation was basically taken from the Visualization Toolkit VTK (Version 5.6.0)
Note: There is no internal check if the matrix is really symmetric. If it is not symmetric, the behaviour of this function is not predictable
eigenvectors | contains the resulting eigenvectors in it's columns |
eigenvalues | becomes a N-dimensional column vector which ith element is the eigenvalue that corresponds to the ith column of eigenvectors |
|
inline |
inner product of data pointers (not matrix-mulitiplication)
computes the inner-product of data vectors
|
inline |
Elementwise division (in source destination fashion) [IPP-Supported].
|
inline |
Elementwise matrix multiplication (without destination matrix) [IPP-Supported].
|
inline |
Elementwise matrix multiplication (in source destination fashion) [IPP-Supported].
|
inline |
Elementwise matrix multiplication (without destination matrix) [IPP-Supported].
|
inline |
returns an iterator to the end of internal data array
|
inline |
returns an iterator to the end of internal data array (const)
|
inlinestatic |
creates a dim-D identity Matrix
|
inlineprivate |
|
inlineprivate |
DynMatrix icl::math::DynMatrix< T >::inv | ( | ) | const |
invert the matrix (only for icl32f and icl64f)
|
inline |
returns with this matrix has a valid data pointer
|
inline |
tests weather a matrix is enough similar to another matrix
|
static |
loads a dynmatrix from given CSV file
supported types T are all icl8u, icl16s, icl32s, icl32f, icl64f. Each row of the CSV file becomes a matrix row. The column delimiter is ',' Rows, that begin with '#' or with ' ' or that have no length are ignored
|
inline |
Multiply elements with scalar (in source destination fashion)
|
inline |
Matrix multiplication (in source destination fashion) [IPP-Supported].
|
inline |
applies an L_l norm on the matrix elements (all elements are treated as vector)
|
inline |
Multiply elements with scalar.
|
inline |
Essential matrix multiplication [IPP-Supported].
|
inline |
Multiply elements with scalar (inplace)
|
inline |
inplace matrix multiplication applying this = this*m [IPP-Supported]
|
inline |
elementwise comparison (!=)
|
inline |
element access operator (x,y)-access index begin 0!
|
inline |
element access operator (x,y)-access index begin 0! (const)
|
inline |
adds a scalar to each element
|
inline |
Matrix addition.
|
inline |
adds a scalar to each element (inplace)
|
inline |
Matrix addition (inplace)
|
inline |
substacts a scalar from each element
|
inline |
Matrix substraction.
|
inline |
substacts a scalar from each element (inplace)
|
inline |
Matrix substraction (inplace)
|
inline |
Device elements by scalar.
|
inline |
inplace matrix devision (calling this/m.inv()) [IPP-Supported]
|
inline |
Device elements by scalar (inplace)
|
inline |
inplace matrix devision (calling this/m.inv()) (inplace)
|
inline |
Assignment operator (using deep/shallow-copy)
In general, the assignment operator applys a deep copy only in case of (*this) is not initialized and other is a shallow copy, (*this) will also become a shallow copy of the data referenced by other
|
inline |
|
inline |
elementwise comparison (==)
|
inline |
linear access to actual data array
|
inline |
linear access to actual data array (const)
DynMatrix icl::math::DynMatrix< T >::pinv | ( | bool | useSVD = false , |
T | zeroThreshold = T(1E-16) |
||
) | const |
calculates the Moore-Penrose pseudo-inverse (only implemented for icl32f and icl64f)
Internally, this functions can use either a QR-decomposition based approach, or it can use SVD. QR-Decomposition is already much more stable than the naiv approach pinv(X) = X*(X*X')^(-1)
The QR-decomposition based approach does not use the zeroThreshold variable.
If useSVD is set to true, internally an SVD based approach is used:
DynMatrix S,v,D; svd_dyn(*this,U,s,V);
DynMatrix S(s.rows(),s.rows(),0.0f); for(unsigned int i=0;i<s.rows();++i){ S(i,i) = (fabs(s[i]) > zeroThreshold) ? 1.0/s[i] : 0; } return V * S * U.transp();
|
inline |
resets the matrix dimensions without changing the content
This methods can only be used in case of cols()*rows() equals to newCols*newRows. If this dependency is fulfilled, only the matrix's m_cols and m_rows member variables are adapted according to the new values. The internal data is not touched at all, so the matrix's internal row-major data order is not affected.
This method can particularly be used to cheaply convert a row-vector matrix into a column vector matrix.
|
inline |
Extracts a shallow copied matrix row.
|
inline |
Extracts a shallow copied matrix row (const)
|
inline |
returns an iterator running through a certain matrix row
|
inline |
returns an iterator running through a certain matrix row (const)
|
inlineprivate |
|
inline |
returns an iterator of a certains row's end
|
inline |
returns an iterator of a certains row's end (const)
|
inline |
height of the matrix (number of rows)
void icl::math::DynMatrix< T >::saveCSV | ( | const std::string & | filename | ) |
writes the current matrix to a csv file
supported types T are all icl8u, icl16s, icl32s, icl32f, icl64f
|
inline |
sets new data internally and returns old data pointer (for experts only!)
|
inline |
resets matrix dimensions
|
inline |
returns a shallow transposed copy of this matrix (dimensions are swapped, data is not re-aranged) (const)
This is usually only useful for transposing row- to colume vectors and vice versa.
|
inline |
returns a shallow transposed copy of this matrix (dimensions are swapped, data is not re-aranged)
DynMatrix icl::math::DynMatrix< T >::solve | ( | const DynMatrix< T > & | b, |
const std::string & | method = "lu" , |
||
T | zeroThreshold = T(1E-16) |
||
) |
solves Mx=b for M=*this (only for icl32f and icl64f)
solves Mx=b using one of the following algorithms
b | |
method | "lu" (default) using LU-decomposition "svd" (using svd-based pseudo-inverse) "qr" (using QR-decomposition based pseudo-inverse) "inv" (using matrix inverse) |
While LU decomposition based solving provides the worst results, it is also the fastest method in general. Only in case of having very small matrices (e.g. 4x4), other methods are faster. A double precision random N by N system is solved up to an accuracy of about 10e-5 if LU decomposition is used. All other methods provide accuracies of about 10e-14 in case of double precision.
Here are some benchmarks for double precision: 10.000 times 4x4 matrix: inv 16.2 ms lu 26.7 ms qr 105 ms svd 142 ms 10.000 times 5x5 matrix: inv 20.2 ms lu 30.2 ms qr 148 ms svd 131 ms 10.000 times 6x6 matrix: inv 26.9 ms lu 35.6 ms qr 206 ms svd 192 ms 10.000 times 4x4 matrix: inv 448 ms lu 42 ms qr 642 ms svd 237 ms 10.000 times 10x10 matrix: inv 2200 ms lu 75 ms qr 3000 ms svd 495 ms 10 times 50x50 matrix: note: here we have inv and qr in seconds and only 10 trials! inv 5.7 s lu 2.5 ms qr 4.6 s svd 23.4 ms
zeroThreshold |
DynMatrix icl::math::DynMatrix< T >::solve_lower_triangular | ( | const DynMatrix< T > & | b | ) | const |
solves Mx=b for M=*this (only if M is a squared lower triangular matrix) (only for icl32f and icl64f)
DynMatrix icl::math::DynMatrix< T >::solve_upper_triangular | ( | const DynMatrix< T > & | b | ) | const |
solves Mx=b for M=*this (only if M is a squared upper triangular matrix) (only for icl32f and icl64f)
|
inline |
returns the squared distance of the inner data vectors (linearly interpreted) (IPP accelerated)
|
inline |
returns sizeof (T)*dim()
|
inline |
returns sizeof(T)*cols()
|
inline |
returns sizeof (T)
void icl::math::DynMatrix< T >::svd | ( | DynMatrix< T > & | U, |
DynMatrix< T > & | S, | ||
DynMatrix< T > & | V | ||
) | const |
Computes Singular Value Decomposition of a matrix - decomposes A into USV'.
Internaly, this function will always use double values. Other types are converted internally. This funciton is only instantiated for icl32f and icl64f.
U | is filled column-wise with the eigenvectors of AA' |
S | is filled with the singular values of A (s is a ColumnVector and not diagonal matrix) |
V | is filled column-wise with the eigenvectors of A'A (in V, V is stored not V') |
|
inline |
computes the sum of all diagonal elements
|
inline |
matrix transposed
|
private |
|
private |
|
private |
|
private |