//! More...
Classes | |
| class | op_princomp |
Functions | |
| template<typename eT > | |
| static void | op_princomp::direct_princomp (Mat< eT > &coeff_out, Mat< eT > &score_out, Col< eT > &latent_out, Col< eT > &tsquared_out, const Mat< eT > &in) |
| //! principal component analysis -- 4 arguments version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples //! latent_out -> eigenvalues of principal vectors //! tsquared_out -> Hotelling's T^2 statistic | |
| template<typename eT > | |
| static void | op_princomp::direct_princomp (Mat< eT > &coeff_out, Mat< eT > &score_out, Col< eT > &latent_out, const Mat< eT > &in) |
| //! principal component analysis -- 3 arguments version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples //! latent_out -> eigenvalues of principal vectors | |
| template<typename eT > | |
| static void | op_princomp::direct_princomp (Mat< eT > &coeff_out, Mat< eT > &score_out, const Mat< eT > &in) |
| //! principal component analysis -- 2 arguments version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples | |
| template<typename eT > | |
| static void | op_princomp::direct_princomp (Mat< eT > &coeff_out, const Mat< eT > &in) |
| //! principal component analysis -- 1 argument version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients | |
| template<typename T > | |
| static void | op_princomp::direct_princomp (Mat< std::complex< T > > &coeff_out, Mat< std::complex< T > > &score_out, Col< T > &latent_out, Col< std::complex< T > > &tsquared_out, const Mat< std::complex< T > > &in) |
| //! principal component analysis -- 4 arguments complex version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples //! latent_out -> eigenvalues of principal vectors //! tsquared_out -> Hotelling's T^2 statistic | |
| template<typename T > | |
| static void | op_princomp::direct_princomp (Mat< std::complex< T > > &coeff_out, Mat< std::complex< T > > &score_out, Col< T > &latent_out, const Mat< std::complex< T > > &in) |
| //! principal component analysis -- 3 arguments complex version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples //! latent_out -> eigenvalues of principal vectors | |
| template<typename T > | |
| static void | op_princomp::direct_princomp (Mat< std::complex< T > > &coeff_out, Mat< std::complex< T > > &score_out, const Mat< std::complex< T > > &in) |
| //! principal component analysis -- 2 arguments complex version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples | |
| template<typename T > | |
| static void | op_princomp::direct_princomp (Mat< std::complex< T > > &coeff_out, const Mat< std::complex< T > > &in) |
| //! principal component analysis -- 1 argument complex version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients | |
| template<typename T1 > | |
| static void | op_princomp::apply (Mat< typename T1::elem_type > &out, const Op< T1, op_princomp > &in) |
//!
| void op_princomp::direct_princomp | ( | Mat< eT > & | coeff_out, | |
| Mat< eT > & | score_out, | |||
| Col< eT > & | latent_out, | |||
| Col< eT > & | tsquared_out, | |||
| const Mat< eT > & | in | |||
| ) | [inline, static, inherited] |
//! principal component analysis -- 4 arguments version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples //! latent_out -> eigenvalues of principal vectors //! tsquared_out -> Hotelling's T^2 statistic
Definition at line 34 of file op_princomp_meat.hpp.
References arma_print(), Mat< eT >::cols(), Mat< eT >::copy_size(), diagmat(), mean(), Mat< eT >::n_cols, Mat< eT >::n_rows, repmat(), Mat< eT >::reset(), Col< eT >::rows(), Col< eT >::set_size(), sqrt(), sum(), svd(), Mat< eT >::zeros(), and Col< eT >::zeros().
{
arma_extra_debug_sigprint();
const u32 n_rows = in.n_rows;
const u32 n_cols = in.n_cols;
if(n_rows > 1) // more than one sample
{
// subtract the mean - use score_out as temporary matrix
score_out = in - repmat(mean(in), n_rows, 1);
// singular value decomposition
Mat<eT> U;
Col<eT> s;
const bool svd_ok = svd(U,s,coeff_out,score_out);
if(svd_ok == false)
{
arma_print("princomp(): singular value decomposition failed");
coeff_out.reset();
score_out.reset();
latent_out.reset();
tsquared_out.reset();
return;
}
//U.reset(); // TODO: do we need this ? U will get automatically deleted anyway
// normalize the eigenvalues
s /= std::sqrt(n_rows - 1);
// project the samples to the principals
score_out *= coeff_out;
if(n_rows <= n_cols) // number of samples is less than their dimensionality
{
score_out.cols(n_rows-1,n_cols-1).zeros();
//Col<eT> s_tmp = zeros< Col<eT> >(n_cols);
Col<eT> s_tmp(n_cols);
s_tmp.zeros();
s_tmp.rows(0,n_rows-2) = s.rows(0,n_rows-2);
s = s_tmp;
// compute the Hotelling's T-squared
s_tmp.rows(0,n_rows-2) = eT(1) / s_tmp.rows(0,n_rows-2);
const Mat<eT> S = score_out * diagmat(Col<eT>(s_tmp));
tsquared_out = sum(S%S,1);
}
else
{
// compute the Hotelling's T-squared
const Mat<eT> S = score_out * diagmat(Col<eT>( eT(1) / s));
tsquared_out = sum(S%S,1);
}
// compute the eigenvalues of the principal vectors
latent_out = s%s;
}
else // single sample - row
{
if(n_rows == 1)
{
coeff_out = eye< Mat<eT> >(n_cols, n_cols);
score_out.copy_size(in);
score_out.zeros();
latent_out.set_size(n_cols);
latent_out.zeros();
tsquared_out.set_size(1);
tsquared_out.zeros();
}
else
{
coeff_out.reset();
score_out.reset();
latent_out.reset();
tsquared_out.reset();
}
}
}
| void op_princomp::direct_princomp | ( | Mat< eT > & | coeff_out, | |
| Mat< eT > & | score_out, | |||
| Col< eT > & | latent_out, | |||
| const Mat< eT > & | in | |||
| ) | [inline, static, inherited] |
//! principal component analysis -- 3 arguments version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples //! latent_out -> eigenvalues of principal vectors
Definition at line 144 of file op_princomp_meat.hpp.
References arma_print(), Mat< eT >::cols(), Mat< eT >::copy_size(), mean(), Mat< eT >::n_cols, Mat< eT >::n_rows, repmat(), Mat< eT >::reset(), Col< eT >::rows(), Col< eT >::set_size(), sqrt(), svd(), Col< eT >::zeros(), and Mat< eT >::zeros().
{
arma_extra_debug_sigprint();
const u32 n_rows = in.n_rows;
const u32 n_cols = in.n_cols;
if(n_rows > 1) // more than one sample
{
// subtract the mean - use score_out as temporary matrix
score_out = in - repmat(mean(in), n_rows, 1);
// singular value decomposition
Mat<eT> U;
Col<eT> s;
const bool svd_ok = svd(U,s,coeff_out,score_out);
if(svd_ok == false)
{
arma_print("princomp(): singular value decomposition failed");
coeff_out.reset();
score_out.reset();
latent_out.reset();
return;
}
// U.reset();
// normalize the eigenvalues
s /= std::sqrt(n_rows - 1);
// project the samples to the principals
score_out *= coeff_out;
if(n_rows <= n_cols) // number of samples is less than their dimensionality
{
score_out.cols(n_rows-1,n_cols-1).zeros();
Col<eT> s_tmp = zeros< Col<eT> >(n_cols);
s_tmp.rows(0,n_rows-2) = s.rows(0,n_rows-2);
s = s_tmp;
}
// compute the eigenvalues of the principal vectors
latent_out = s%s;
}
else // single sample - row
{
if(n_rows == 1)
{
coeff_out = eye< Mat<eT> >(n_cols, n_cols);
score_out.copy_size(in);
score_out.zeros();
latent_out.set_size(n_cols);
latent_out.zeros();
}
else
{
coeff_out.reset();
score_out.reset();
latent_out.reset();
}
}
}
| void op_princomp::direct_princomp | ( | Mat< eT > & | coeff_out, | |
| Mat< eT > & | score_out, | |||
| const Mat< eT > & | in | |||
| ) | [inline, static, inherited] |
//! principal component analysis -- 2 arguments version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples
Definition at line 233 of file op_princomp_meat.hpp.
References arma_print(), Mat< eT >::cols(), Mat< eT >::copy_size(), mean(), Mat< eT >::n_cols, Mat< eT >::n_rows, repmat(), Mat< eT >::reset(), Col< eT >::rows(), sqrt(), svd(), and Mat< eT >::zeros().
{
arma_extra_debug_sigprint();
const u32 n_rows = in.n_rows;
const u32 n_cols = in.n_cols;
if(n_rows > 1) // more than one sample
{
// subtract the mean - use score_out as temporary matrix
score_out = in - repmat(mean(in), n_rows, 1);
// singular value decomposition
Mat<eT> U;
Col<eT> s;
const bool svd_ok = svd(U,s,coeff_out,score_out);
if(svd_ok == false)
{
arma_print("princomp(): singular value decomposition failed");
coeff_out.reset();
score_out.reset();
return;
}
// U.reset();
// normalize the eigenvalues
s /= std::sqrt(n_rows - 1);
// project the samples to the principals
score_out *= coeff_out;
if(n_rows <= n_cols) // number of samples is less than their dimensionality
{
score_out.cols(n_rows-1,n_cols-1).zeros();
Col<eT> s_tmp = zeros< Col<eT> >(n_cols);
s_tmp.rows(0,n_rows-2) = s.rows(0,n_rows-2);
s = s_tmp;
}
}
else // single sample - row
{
if(n_rows == 1)
{
coeff_out = eye< Mat<eT> >(n_cols, n_cols);
score_out.copy_size(in);
score_out.zeros();
}
else
{
coeff_out.reset();
score_out.reset();
}
}
}
| void op_princomp::direct_princomp | ( | Mat< eT > & | coeff_out, | |
| const Mat< eT > & | in | |||
| ) | [inline, static, inherited] |
//! principal component analysis -- 1 argument version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients
Definition at line 308 of file op_princomp_meat.hpp.
References arma_print(), mean(), Mat< eT >::n_elem, Mat< eT >::n_rows, repmat(), Mat< eT >::reset(), and svd().
Referenced by apply(), and princomp().
{
arma_extra_debug_sigprint();
if(in.n_elem != 0)
{
// singular value decomposition
Mat<eT> U;
Col<eT> s;
const Mat<eT> tmp = in - repmat(mean(in), in.n_rows, 1);
const bool svd_ok = svd(U,s,coeff_out, tmp);
if(svd_ok == false)
{
arma_print("princomp(): singular value decomposition failed");
coeff_out.reset();
}
}
else
{
coeff_out.reset();
}
}
| void op_princomp::direct_princomp | ( | Mat< std::complex< T > > & | coeff_out, | |
| Mat< std::complex< T > > & | score_out, | |||
| Col< T > & | latent_out, | |||
| Col< std::complex< T > > & | tsquared_out, | |||
| const Mat< std::complex< T > > & | in | |||
| ) | [inline, static, inherited] |
//! principal component analysis -- 4 arguments complex version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples //! latent_out -> eigenvalues of principal vectors //! tsquared_out -> Hotelling's T^2 statistic
Definition at line 351 of file op_princomp_meat.hpp.
References arma_print(), Mat< eT >::cols(), Mat< eT >::copy_size(), diagmat(), mean(), Mat< eT >::n_cols, Mat< eT >::n_rows, repmat(), Mat< eT >::reset(), Col< eT >::rows(), Col< eT >::set_size(), sqrt(), sum(), svd(), Col< eT >::zeros(), and Mat< eT >::zeros().
{
arma_extra_debug_sigprint();
typedef std::complex<T> eT;
const u32 n_rows = in.n_rows;
const u32 n_cols = in.n_cols;
if(n_rows > 1) // more than one sample
{
// subtract the mean - use score_out as temporary matrix
score_out = in - repmat(mean(in), n_rows, 1);
// singular value decomposition
Mat<eT> U;
Col<T> s;
const bool svd_ok = svd(U,s,coeff_out,score_out);
if(svd_ok == false)
{
arma_print("princomp(): singular value decomposition failed");
coeff_out.reset();
score_out.reset();
latent_out.reset();
tsquared_out.reset();
return;
}
//U.reset();
// normalize the eigenvalues
s /= std::sqrt(n_rows - 1);
// project the samples to the principals
score_out *= coeff_out;
if(n_rows <= n_cols) // number of samples is less than their dimensionality
{
score_out.cols(n_rows-1,n_cols-1).zeros();
Col<T> s_tmp = zeros< Col<T> >(n_cols);
s_tmp.rows(0,n_rows-2) = s.rows(0,n_rows-2);
s = s_tmp;
// compute the Hotelling's T-squared
s_tmp.rows(0,n_rows-2) = 1.0 / s_tmp.rows(0,n_rows-2);
const Mat<eT> S = score_out * diagmat(Col<T>(s_tmp));
tsquared_out = sum(S%S,1);
}
else
{
// compute the Hotelling's T-squared
const Mat<eT> S = score_out * diagmat(Col<T>(T(1) / s));
tsquared_out = sum(S%S,1);
}
// compute the eigenvalues of the principal vectors
latent_out = s%s;
}
else // single sample - row
{
if(n_rows == 1)
{
coeff_out = eye< Mat<eT> >(n_cols, n_cols);
score_out.copy_size(in);
score_out.zeros();
latent_out.set_size(n_cols);
latent_out.zeros();
tsquared_out.set_size(1);
tsquared_out.zeros();
}
else
{
coeff_out.reset();
score_out.reset();
latent_out.reset();
tsquared_out.reset();
}
}
}
| void op_princomp::direct_princomp | ( | Mat< std::complex< T > > & | coeff_out, | |
| Mat< std::complex< T > > & | score_out, | |||
| Col< T > & | latent_out, | |||
| const Mat< std::complex< T > > & | in | |||
| ) | [inline, static, inherited] |
//! principal component analysis -- 3 arguments complex version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples //! latent_out -> eigenvalues of principal vectors
Definition at line 459 of file op_princomp_meat.hpp.
References arma_print(), Mat< eT >::cols(), Mat< eT >::copy_size(), mean(), Mat< eT >::n_cols, Mat< eT >::n_rows, repmat(), Mat< eT >::reset(), Col< eT >::rows(), Col< eT >::set_size(), sqrt(), svd(), Col< eT >::zeros(), and Mat< eT >::zeros().
{
arma_extra_debug_sigprint();
typedef std::complex<T> eT;
const u32 n_rows = in.n_rows;
const u32 n_cols = in.n_cols;
if(n_rows > 1) // more than one sample
{
// subtract the mean - use score_out as temporary matrix
score_out = in - repmat(mean(in), n_rows, 1);
// singular value decomposition
Mat<eT> U;
Col< T> s;
const bool svd_ok = svd(U,s,coeff_out,score_out);
if(svd_ok == false)
{
arma_print("princomp(): singular value decomposition failed");
coeff_out.reset();
score_out.reset();
latent_out.reset();
return;
}
// U.reset();
// normalize the eigenvalues
s /= std::sqrt(n_rows - 1);
// project the samples to the principals
score_out *= coeff_out;
if(n_rows <= n_cols) // number of samples is less than their dimensionality
{
score_out.cols(n_rows-1,n_cols-1).zeros();
Col<T> s_tmp = zeros< Col<T> >(n_cols);
s_tmp.rows(0,n_rows-2) = s.rows(0,n_rows-2);
s = s_tmp;
}
// compute the eigenvalues of the principal vectors
latent_out = s%s;
}
else // single sample - row
{
if(n_rows == 1)
{
coeff_out = eye< Mat<eT> >(n_cols, n_cols);
score_out.copy_size(in);
score_out.zeros();
latent_out.set_size(n_cols);
latent_out.zeros();
}
else
{
coeff_out.reset();
score_out.reset();
latent_out.reset();
}
}
}
| void op_princomp::direct_princomp | ( | Mat< std::complex< T > > & | coeff_out, | |
| Mat< std::complex< T > > & | score_out, | |||
| const Mat< std::complex< T > > & | in | |||
| ) | [inline, static, inherited] |
//! principal component analysis -- 2 arguments complex version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients //! score_out -> projected samples
Definition at line 547 of file op_princomp_meat.hpp.
References arma_print(), Mat< eT >::cols(), Mat< eT >::copy_size(), mean(), Mat< eT >::n_cols, Mat< eT >::n_rows, repmat(), Mat< eT >::reset(), sqrt(), svd(), and Mat< eT >::zeros().
{
arma_extra_debug_sigprint();
typedef std::complex<T> eT;
const u32 n_rows = in.n_rows;
const u32 n_cols = in.n_cols;
if(n_rows > 1) // more than one sample
{
// subtract the mean - use score_out as temporary matrix
score_out = in - repmat(mean(in), n_rows, 1);
// singular value decomposition
Mat<eT> U;
Col< T> s;
const bool svd_ok = svd(U,s,coeff_out,score_out);
if(svd_ok == false)
{
arma_print("princomp(): singular value decomposition failed");
coeff_out.reset();
score_out.reset();
return;
}
// U.reset();
// normalize the eigenvalues
s /= std::sqrt(n_rows - 1);
// project the samples to the principals
score_out *= coeff_out;
if(n_rows <= n_cols) // number of samples is less than their dimensionality
{
score_out.cols(n_rows-1,n_cols-1).zeros();
}
}
else // single sample - row
{
if(n_rows == 1)
{
coeff_out = eye< Mat<eT> >(n_cols, n_cols);
score_out.copy_size(in);
score_out.zeros();
}
else
{
coeff_out.reset();
score_out.reset();
}
}
}
| void op_princomp::direct_princomp | ( | Mat< std::complex< T > > & | coeff_out, | |
| const Mat< std::complex< T > > & | in | |||
| ) | [inline, static, inherited] |
//! principal component analysis -- 1 argument complex version //! computation is done via singular value decomposition //! coeff_out -> principal component coefficients
Definition at line 622 of file op_princomp_meat.hpp.
References arma_print(), mean(), Mat< eT >::n_elem, Mat< eT >::n_rows, repmat(), Mat< eT >::reset(), and svd().
{
arma_extra_debug_sigprint();
typedef typename std::complex<T> eT;
if(in.n_elem != 0)
{
// singular value decomposition
Mat<eT> U;
Col< T> s;
const Mat<eT> tmp = in - repmat(mean(in), in.n_rows, 1);
const bool svd_ok = svd(U,s,coeff_out, tmp);
if(svd_ok == false)
{
arma_print("princomp(): singular value decomposition failed");
coeff_out.reset();
}
}
else
{
coeff_out.reset();
}
}
| void op_princomp::apply | ( | Mat< typename T1::elem_type > & | out, | |
| const Op< T1, op_princomp > & | in | |||
| ) | [inline, static, inherited] |
Definition at line 660 of file op_princomp_meat.hpp.
References direct_princomp(), unwrap_check< T1 >::M, and Op< T1, op_type >::m.
{
arma_extra_debug_sigprint();
typedef typename T1::elem_type eT;
const unwrap_check<T1> tmp(in.m, out);
const Mat<eT>& A = tmp.M;
op_princomp::direct_princomp(out, A);
}