Mercurial > hg > segmenter-vamp-plugin
annotate armadillo-3.900.4/include/armadillo_bits/fn_rank.hpp @ 84:55a047986812 tip
Update library URI so as not to be document-local
author | Chris Cannam |
---|---|
date | Wed, 22 Apr 2020 14:21:57 +0100 |
parents | 1ec0e2823891 |
children |
rev | line source |
---|---|
Chris@49 | 1 // Copyright (C) 2009-2011 NICTA (www.nicta.com.au) |
Chris@49 | 2 // Copyright (C) 2009-2011 Conrad Sanderson |
Chris@49 | 3 // Copyright (C) 2009-2010 Dimitrios Bouzas |
Chris@49 | 4 // Copyright (C) 2011 Stanislav Funiak |
Chris@49 | 5 // |
Chris@49 | 6 // This Source Code Form is subject to the terms of the Mozilla Public |
Chris@49 | 7 // License, v. 2.0. If a copy of the MPL was not distributed with this |
Chris@49 | 8 // file, You can obtain one at http://mozilla.org/MPL/2.0/. |
Chris@49 | 9 |
Chris@49 | 10 |
Chris@49 | 11 //! \addtogroup fn_rank |
Chris@49 | 12 //! @{ |
Chris@49 | 13 |
Chris@49 | 14 |
Chris@49 | 15 |
Chris@49 | 16 template<typename T1> |
Chris@49 | 17 inline |
Chris@49 | 18 arma_warn_unused |
Chris@49 | 19 uword |
Chris@49 | 20 rank |
Chris@49 | 21 ( |
Chris@49 | 22 const Base<typename T1::elem_type,T1>& X, |
Chris@49 | 23 typename T1::pod_type tol = 0.0, |
Chris@49 | 24 const typename arma_blas_type_only<typename T1::elem_type>::result* junk = 0 |
Chris@49 | 25 ) |
Chris@49 | 26 { |
Chris@49 | 27 arma_extra_debug_sigprint(); |
Chris@49 | 28 arma_ignore(junk); |
Chris@49 | 29 |
Chris@49 | 30 typedef typename T1::pod_type T; |
Chris@49 | 31 |
Chris@49 | 32 uword X_n_rows; |
Chris@49 | 33 uword X_n_cols; |
Chris@49 | 34 Col<T> s; |
Chris@49 | 35 |
Chris@49 | 36 const bool status = auxlib::svd(s, X, X_n_rows, X_n_cols); |
Chris@49 | 37 const uword n_elem = s.n_elem; |
Chris@49 | 38 |
Chris@49 | 39 if(status == true) |
Chris@49 | 40 { |
Chris@49 | 41 if( (tol == T(0)) && (n_elem > 0) ) |
Chris@49 | 42 { |
Chris@49 | 43 tol = (std::max)(X_n_rows, X_n_cols) * eop_aux::direct_eps(max(s)); |
Chris@49 | 44 } |
Chris@49 | 45 |
Chris@49 | 46 // count non zero valued elements in s |
Chris@49 | 47 |
Chris@49 | 48 const T* s_mem = s.memptr(); |
Chris@49 | 49 uword count = 0; |
Chris@49 | 50 |
Chris@49 | 51 for(uword i=0; i<n_elem; ++i) |
Chris@49 | 52 { |
Chris@49 | 53 if(s_mem[i] > tol) |
Chris@49 | 54 { |
Chris@49 | 55 ++count; |
Chris@49 | 56 } |
Chris@49 | 57 } |
Chris@49 | 58 |
Chris@49 | 59 return count; |
Chris@49 | 60 } |
Chris@49 | 61 else |
Chris@49 | 62 { |
Chris@49 | 63 arma_bad("rank(): failed to converge"); |
Chris@49 | 64 |
Chris@49 | 65 return uword(0); |
Chris@49 | 66 } |
Chris@49 | 67 } |
Chris@49 | 68 |
Chris@49 | 69 |
Chris@49 | 70 |
Chris@49 | 71 //! @} |