//! More...
Classes | |
| class | running_stat_vec< eT > |
| Class for keeping statistics of a continuously sampled process / signal. //! Useful if the storage of individual samples is not necessary or desired. //! Also useful if the number of samples is not known beforehand or exceeds //! available memory. More... | |
| class | running_stat_vec_aux |
Functions | |
| running_stat_vec::~running_stat_vec () | |
| running_stat_vec::running_stat_vec (const bool in_calc_cov=false) | |
| running_stat_vec::running_stat_vec (const running_stat_vec &in_rsv) | |
| const running_stat_vec & | running_stat_vec::operator= (const running_stat_vec &in_rsv) |
| template<typename T1 > | |
| arma_hot void | running_stat_vec::operator() (const Base< typename get_pod_type< eT >::result, T1 > &X) |
| update statistics to reflect new sample | |
| template<typename T1 > | |
| arma_hot void | running_stat_vec::operator() (const Base< std::complex< typename get_pod_type< eT >::result >, T1 > &X) |
| update statistics to reflect new sample (version for complex numbers) | |
| void | running_stat_vec::reset () |
| set all statistics to zero | |
| const Mat< eT > & | running_stat_vec::mean () const |
| mean or average value | |
| const Mat< T > & | running_stat_vec::var (const u32 norm_type=0) |
| variance | |
| Mat< T > | running_stat_vec::stddev (const u32 norm_type=0) const |
| standard deviation | |
| const Mat< eT > & | running_stat_vec::cov (const u32 norm_type=0) |
| covariance | |
| const Mat< eT > & | running_stat_vec::min () const |
| vector with minimum values | |
| const Mat< eT > & | running_stat_vec::max () const |
| vector with maximum values | |
| template<typename eT > | |
| static void | running_stat_vec_aux::update_stats (running_stat_vec< eT > &x, const Mat< eT > &sample) |
| update statistics to reflect new sample | |
| template<typename T > | |
| static void | running_stat_vec_aux::update_stats (running_stat_vec< std::complex< T > > &x, const Mat< T > &sample) |
| update statistics to reflect new sample (version for complex numbers) | |
| template<typename T > | |
| static void | running_stat_vec_aux::update_stats (running_stat_vec< std::complex< T > > &x, const Mat< std::complex< T > > &sample) |
| alter statistics to reflect new sample (version for complex numbers) | |
//!
| running_stat_vec< eT >::~running_stat_vec | ( | ) | [inline, inherited] |
Definition at line 23 of file running_stat_vec_meat.hpp.
{
arma_extra_debug_sigprint_this(this);
}
| running_stat_vec< eT >::running_stat_vec | ( | const bool | in_calc_cov = false |
) | [inline, inherited] |
Definition at line 31 of file running_stat_vec_meat.hpp.
: calc_cov(in_calc_cov) { arma_extra_debug_sigprint_this(this); }
| running_stat_vec< eT >::running_stat_vec | ( | const running_stat_vec< eT > & | in_rsv | ) | [inline, inherited] |
Definition at line 40 of file running_stat_vec_meat.hpp.
: calc_cov (in_rsv.calc_cov) , counter (in_rsv.counter) , r_mean (in_rsv.r_mean) , r_var (in_rsv.r_var) , r_cov (in_rsv.r_cov) , min_val (in_rsv.min_val) , max_val (in_rsv.max_val) , min_val_norm(in_rsv.min_val_norm) , max_val_norm(in_rsv.max_val_norm) { arma_extra_debug_sigprint_this(this); }
| const running_stat_vec< eT > & running_stat_vec< eT >::operator= | ( | const running_stat_vec< eT > & | in_rsv | ) | [inline, inherited] |
Definition at line 58 of file running_stat_vec_meat.hpp.
References running_stat_vec< eT >::calc_cov, running_stat_vec< eT >::counter, running_stat_vec< eT >::max_val, running_stat_vec< eT >::max_val_norm, running_stat_vec< eT >::min_val, running_stat_vec< eT >::min_val_norm, running_stat_vec< eT >::r_cov, running_stat_vec< eT >::r_mean, running_stat_vec< eT >::r_var, and access::rw().
{
arma_extra_debug_sigprint();
access::rw(calc_cov) = in_rsv.calc_cov;
counter = in_rsv.counter;
r_mean = in_rsv.r_mean;
r_var = in_rsv.r_var;
r_cov = in_rsv.r_cov;
min_val = in_rsv.min_val;
max_val = in_rsv.max_val;
min_val_norm = in_rsv.min_val_norm;
max_val_norm = in_rsv.max_val_norm;
return *this;
}
| arma_hot void running_stat_vec< eT >::operator() | ( | const Base< typename get_pod_type< eT >::result, T1 > & | X | ) | [inline, inherited] |
update statistics to reflect new sample
Definition at line 84 of file running_stat_vec_meat.hpp.
References arma_check(), and running_stat_vec_aux::update_stats().
{
arma_extra_debug_sigprint();
//typedef typename get_pod_type<eT>::result T;
const unwrap<T1> tmp(X.get_ref());
const Mat<eT>& sample = tmp.M;
arma_check( (sample.is_finite() == false), "running_stat_vec: given sample has non-finite elements" );
running_stat_vec_aux::update_stats(*this, sample);
}
| arma_hot void running_stat_vec< eT >::operator() | ( | const Base< std::complex< typename get_pod_type< eT >::result >, T1 > & | X | ) | [inline, inherited] |
update statistics to reflect new sample (version for complex numbers)
Definition at line 106 of file running_stat_vec_meat.hpp.
References arma_check(), and running_stat_vec_aux::update_stats().
{
arma_extra_debug_sigprint();
//typedef typename std::complex<typename get_pod_type<eT>::result> eT;
const unwrap<T1> tmp(X.get_ref());
const Mat<eT>& sample = tmp.M;
arma_check( (sample.is_finite() == false), "running_stat_vec: given sample has non-finite elements" );
running_stat_vec_aux::update_stats(*this, sample);
}
| void running_stat_vec< eT >::reset | ( | ) | [inline, inherited] |
set all statistics to zero
Definition at line 126 of file running_stat_vec_meat.hpp.
References running_stat_vec< eT >::counter, running_stat_vec< eT >::max_val, running_stat_vec< eT >::max_val_norm, running_stat_vec< eT >::min_val, running_stat_vec< eT >::min_val_norm, running_stat_vec< eT >::r_cov, running_stat_vec< eT >::r_cov_dummy, running_stat_vec< eT >::r_mean, running_stat_vec< eT >::r_var, running_stat_vec< eT >::r_var_dummy, Mat< eT >::reset(), arma_counter< eT >::reset(), running_stat_vec< eT >::tmp1, and running_stat_vec< eT >::tmp2.
{
arma_extra_debug_sigprint();
counter.reset();
r_mean.reset();
r_var.reset();
r_cov.reset();
min_val.reset();
max_val.reset();
min_val_norm.reset();
max_val_norm.reset();
r_var_dummy.reset();
r_cov_dummy.reset();
tmp1.reset();
tmp2.reset();
}
| const Mat< eT > & running_stat_vec< eT >::mean | ( | ) | const [inline, inherited] |
mean or average value
Definition at line 155 of file running_stat_vec_meat.hpp.
References running_stat_vec< eT >::r_mean.
{
arma_extra_debug_sigprint();
return r_mean;
}
| const Mat< typename get_pod_type< eT >::result > & running_stat_vec< eT >::var | ( | const u32 | norm_type = 0 |
) | [inline, inherited] |
variance
Definition at line 168 of file running_stat_vec_meat.hpp.
References running_stat_vec< eT >::counter, running_stat_vec< eT >::r_mean, running_stat_vec< eT >::r_var, running_stat_vec< eT >::r_var_dummy, arma_counter< eT >::value(), arma_counter< eT >::value_minus_1(), and Mat< eT >::zeros().
{
arma_extra_debug_sigprint();
const T N = counter.value();
if(N > T(1))
{
if(norm_type == 0)
{
return r_var;
}
else
{
const T N_minus_1 = counter.value_minus_1();
r_var_dummy = (N_minus_1/N) * r_var;
return r_var_dummy;
}
}
else
{
r_var_dummy.zeros(r_mean.n_rows, r_mean.n_cols);
return r_var_dummy;
}
}
| Mat< typename get_pod_type< eT >::result > running_stat_vec< eT >::stddev | ( | const u32 | norm_type = 0 |
) | const [inline, inherited] |
standard deviation
Definition at line 204 of file running_stat_vec_meat.hpp.
References running_stat_vec< eT >::counter, running_stat_vec< eT >::r_var, sqrt(), arma_counter< eT >::value(), and arma_counter< eT >::value_minus_1().
| const Mat< eT > & running_stat_vec< eT >::cov | ( | const u32 | norm_type = 0 |
) | [inline, inherited] |
covariance
Definition at line 235 of file running_stat_vec_meat.hpp.
References running_stat_vec< eT >::calc_cov, running_stat_vec< eT >::counter, running_stat_vec< eT >::r_cov, running_stat_vec< eT >::r_cov_dummy, running_stat_vec< eT >::r_mean, arma_counter< eT >::value(), and arma_counter< eT >::value_minus_1().
{
arma_extra_debug_sigprint();
if(calc_cov == true)
{
const T N = counter.value();
if(N > T(1))
{
if(norm_type == 0)
{
return r_cov;
}
else
{
const T N_minus_1 = counter.value_minus_1();
r_cov_dummy = (N_minus_1/N) * r_cov;
return r_cov_dummy;
}
}
else
{
r_cov_dummy.zeros(r_mean.n_rows, r_mean.n_cols);
return r_cov_dummy;
}
}
else
{
r_cov_dummy.reset();
return r_cov_dummy;
}
}
| const Mat< eT > & running_stat_vec< eT >::min | ( | ) | const [inline, inherited] |
vector with minimum values
Definition at line 280 of file running_stat_vec_meat.hpp.
References running_stat_vec< eT >::min_val.
{
arma_extra_debug_sigprint();
return min_val;
}
| const Mat< eT > & running_stat_vec< eT >::max | ( | ) | const [inline, inherited] |
vector with maximum values
Definition at line 293 of file running_stat_vec_meat.hpp.
References running_stat_vec< eT >::max_val.
{
arma_extra_debug_sigprint();
return max_val;
}
| void running_stat_vec_aux::update_stats | ( | running_stat_vec< eT > & | x, | |
| const Mat< eT > & | sample | |||
| ) | [inline, static, inherited] |
update statistics to reflect new sample
Definition at line 310 of file running_stat_vec_meat.hpp.
References running_stat_vec< eT >::calc_cov, running_stat_vec< eT >::counter, Mat< eT >::is_vec(), running_stat_vec< eT >::max_val, Mat< eT >::memptr(), running_stat_vec< eT >::min_val, Mat< eT >::n_cols, Mat< eT >::n_elem, Mat< eT >::n_rows, running_stat_vec< eT >::r_cov, running_stat_vec< eT >::r_mean, running_stat_vec< eT >::r_var, running_stat_vec< eT >::tmp1, running_stat_vec< eT >::tmp2, trans(), arma_counter< eT >::value(), arma_counter< eT >::value_minus_1(), arma_counter< eT >::value_plus_1(), and Mat< eT >::zeros().
Referenced by running_stat_vec< eT >::operator()(), and running_stat_vec_aux::update_stats().
{
arma_extra_debug_sigprint();
typedef typename running_stat_vec<eT>::T T;
const T N = x.counter.value();
if(N > T(0))
{
arma_debug_assert_same_size(x.r_mean, sample, "running_stat_vec(): dimensionality mismatch");
const u32 n_elem = sample.n_elem;
const eT* sample_mem = sample.memptr();
eT* r_mean_mem = x.r_mean.memptr();
T* r_var_mem = x.r_var.memptr();
eT* min_val_mem = x.min_val.memptr();
eT* max_val_mem = x.max_val.memptr();
const T N_plus_1 = x.counter.value_plus_1();
const T N_minus_1 = x.counter.value_minus_1();
if(x.calc_cov == true)
{
Mat<eT>& tmp1 = x.tmp1;
Mat<eT>& tmp2 = x.tmp2;
tmp1 = sample - x.r_mean;
if(sample.n_cols == 1)
{
tmp2 = tmp1*trans(tmp1);
}
else
{
tmp2 = trans(tmp1)*tmp1;
}
x.r_cov *= (N_minus_1/N);
x.r_cov += tmp2 / N_plus_1;
}
for(u32 i=0; i<n_elem; ++i)
{
const eT val = sample_mem[i];
if(val < min_val_mem[i])
{
min_val_mem[i] = val;
}
if(val > max_val_mem[i])
{
max_val_mem[i] = val;
}
const eT r_mean_val = r_mean_mem[i];
const eT tmp = val - r_mean_val;
r_var_mem[i] = N_minus_1/N * r_var_mem[i] + (tmp*tmp)/N_plus_1;
r_mean_mem[i] = r_mean_val + (val - r_mean_val)/N_plus_1;
}
}
else
{
arma_debug_check( (sample.is_vec() == false), "running_stat_vec(): given sample is not a vector");
x.r_mean.set_size(sample.n_rows, sample.n_cols);
x.r_var.zeros(sample.n_rows, sample.n_cols);
if(x.calc_cov == true)
{
x.r_cov.zeros(sample.n_elem, sample.n_elem);
}
x.min_val.set_size(sample.n_rows, sample.n_cols);
x.max_val.set_size(sample.n_rows, sample.n_cols);
const u32 n_elem = sample.n_elem;
const eT* sample_mem = sample.memptr();
eT* r_mean_mem = x.r_mean.memptr();
eT* min_val_mem = x.min_val.memptr();
eT* max_val_mem = x.max_val.memptr();
for(u32 i=0; i<n_elem; ++i)
{
const eT val = sample_mem[i];
r_mean_mem[i] = val;
min_val_mem[i] = val;
max_val_mem[i] = val;
}
}
x.counter++;
}
| void running_stat_vec_aux::update_stats | ( | running_stat_vec< std::complex< T > > & | x, | |
| const Mat< T > & | sample | |||
| ) | [inline, static, inherited] |
update statistics to reflect new sample (version for complex numbers)
Definition at line 418 of file running_stat_vec_meat.hpp.
References running_stat_vec_aux::update_stats().
{
arma_extra_debug_sigprint();
const Mat< std::complex<T> > tmp = conv_to< Mat< std::complex<T> > >::from(sample);
running_stat_vec_aux::update_stats(x, tmp);
}
| void running_stat_vec_aux::update_stats | ( | running_stat_vec< std::complex< T > > & | x, | |
| const Mat< std::complex< T > > & | sample | |||
| ) | [inline, static, inherited] |
alter statistics to reflect new sample (version for complex numbers)
Definition at line 433 of file running_stat_vec_meat.hpp.
References conj(), norm(), and trans().
{
arma_extra_debug_sigprint();
typedef typename std::complex<T> eT;
const T N = x.counter.value();
if(N > T(0))
{
arma_debug_assert_same_size(x.r_mean, sample, "running_stat_vec(): dimensionality mismatch");
const u32 n_elem = sample.n_elem;
const eT* sample_mem = sample.memptr();
eT* r_mean_mem = x.r_mean.memptr();
T* r_var_mem = x.r_var.memptr();
eT* min_val_mem = x.min_val.memptr();
eT* max_val_mem = x.max_val.memptr();
T* min_val_norm_mem = x.min_val_norm.memptr();
T* max_val_norm_mem = x.max_val_norm.memptr();
const T N_plus_1 = x.counter.value_plus_1();
const T N_minus_1 = x.counter.value_minus_1();
if(x.calc_cov == true)
{
Mat<eT>& tmp1 = x.tmp1;
Mat<eT>& tmp2 = x.tmp2;
tmp1 = sample - x.r_mean;
if(sample.n_cols == 1)
{
tmp2 = conj(tmp1)*trans(tmp1);
}
else
{
tmp2 = trans(conj(tmp1))*tmp1;
}
x.r_cov *= (N_minus_1/N);
x.r_cov += tmp2 / N_plus_1;
}
for(u32 i=0; i<n_elem; ++i)
{
const eT& val = sample_mem[i];
const T val_norm = std::norm(val);
if(val_norm < min_val_norm_mem[i])
{
min_val_norm_mem[i] = val_norm;
min_val_mem[i] = val;
}
if(val_norm > max_val_norm_mem[i])
{
max_val_norm_mem[i] = val_norm;
max_val_mem[i] = val;
}
const eT& r_mean_val = r_mean_mem[i];
r_var_mem[i] = N_minus_1/N * r_var_mem[i] + std::norm(val - r_mean_val)/N_plus_1;
r_mean_mem[i] = r_mean_val + (val - r_mean_val)/N_plus_1;
}
}
else
{
arma_debug_check( (sample.is_vec() == false), "running_stat_vec(): given sample is not a vector");
x.r_mean.set_size(sample.n_rows, sample.n_cols);
x.r_var.zeros(sample.n_rows, sample.n_cols);
if(x.calc_cov == true)
{
x.r_cov.zeros(sample.n_elem, sample.n_elem);
}
x.min_val.set_size(sample.n_rows, sample.n_cols);
x.max_val.set_size(sample.n_rows, sample.n_cols);
x.min_val_norm.set_size(sample.n_rows, sample.n_cols);
x.max_val_norm.set_size(sample.n_rows, sample.n_cols);
const u32 n_elem = sample.n_elem;
const eT* sample_mem = sample.memptr();
eT* r_mean_mem = x.r_mean.memptr();
eT* min_val_mem = x.min_val.memptr();
eT* max_val_mem = x.max_val.memptr();
T* min_val_norm_mem = x.min_val_norm.memptr();
T* max_val_norm_mem = x.max_val_norm.memptr();
for(u32 i=0; i<n_elem; ++i)
{
const eT& val = sample_mem[i];
const T val_norm = std::norm(val);
r_mean_mem[i] = val;
min_val_mem[i] = val;
max_val_mem[i] = val;
min_val_norm_mem[i] = val_norm;
max_val_norm_mem[i] = val_norm;
}
}
x.counter++;
}