fn_rank.hpp
Go to the documentation of this file.
1 // Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
2 // Copyright (C) 2009-2011 Conrad Sanderson
3 // Copyright (C) 2009-2010 Dimitrios Bouzas
4 // Copyright (C) 2011 Stanislav Funiak
5 //
6 // This file is part of the Armadillo C++ library.
7 // It is provided without any warranty of fitness
8 // for any purpose. You can redistribute this file
9 // and/or modify it under the terms of the GNU
10 // Lesser General Public License (LGPL) as published
11 // by the Free Software Foundation, either version 3
12 // of the License or (at your option) any later version.
13 // (see http://www.opensource.org/licenses for more info)
14 
15 
18 
19 
20 
21 template<typename T1>
22 inline
24 uword
25 rank
26  (
28  typename T1::pod_type tol = 0.0,
30  )
31  {
34 
35  typedef typename T1::elem_type eT;
36  typedef typename T1::pod_type T;
37 
38  uword X_n_rows;
39  uword X_n_cols;
40  Col<T> s;
41 
42  const bool status = auxlib::svd(s, X, X_n_rows, X_n_cols);
43  const uword n_elem = s.n_elem;
44 
45  if(status == true)
46  {
47  if( (tol == T(0)) && (n_elem > 0) )
48  {
49  tol = (std::max)(X_n_rows, X_n_cols) * eop_aux::direct_eps(max(s));
50  }
51 
52  // count non zero valued elements in s
53 
54  const T* s_mem = s.memptr();
55  uword count = 0;
56 
57  for(uword i=0; i<n_elem; ++i)
58  {
59  if(s_mem[i] > tol)
60  {
61  ++count;
62  }
63  }
64 
65  return count;
66  }
67  else
68  {
69  arma_bad("rank(): failed to converge");
70 
71  return uword(0);
72  }
73  }
74 
75 
76 
arma_inline arma_warn_unused eT * memptr()
returns a pointer to array of eTs used by the matrix
Definition: Mat_meat.hpp:4024
arma_warn_unused uword rank(const Base< typename T1::elem_type, T1 > &X, typename T1::pod_type tol=0.0, const typename arma_blas_type_only< typename T1::elem_type >::result *junk=0)
Definition: fn_rank.hpp:26
const uword n_elem
number of elements in the matrix (read-only)
Definition: Mat_bones.hpp:31
arma_inline const Op< T1, op_max > max(const Base< typename T1::elem_type, T1 > &X, const uword dim=0)
Delayed &#39;maximum values&#39; operation. The dimension, along which the maxima are found, is set via &#39;dim&#39;. For dim = 0, the maximum value of each column is found (i.e. searches by traversing across rows). For dim = 1, the maximum value of each row is found (i.e. searches by traversing across columns). The default is dim = 0.
Definition: fn_max.hpp:28
u32 uword
Definition: typedef.hpp:85
Class for column vectors (matrices with only one column)
Definition: Col_bones.hpp:20
#define arma_ignore(variable)
#define arma_extra_debug_sigprint
Definition: debug.hpp:1116
void arma_cold arma_bad(const T1 &x, const bool hurl=true)
print a message to get_stream_err2() and/or throw a run-time error exception
Definition: debug.hpp:150
#define arma_warn_unused
static arma_inline arma_integral_only< eT >::result direct_eps(const eT)
Definition: eop_aux.hpp:269
static bool svd(Col< eT > &S, const Base< eT, T1 > &X, uword &n_rows, uword &n_cols)


armadillo_matrix
Author(s):
autogenerated on Fri Apr 16 2021 02:31:57