Chris@49: // Copyright (C) 2012 NICTA (www.nicta.com.au) Chris@49: // Copyright (C) 2012 Conrad Sanderson Chris@49: // Chris@49: // This Source Code Form is subject to the terms of the Mozilla Public Chris@49: // License, v. 2.0. If a copy of the MPL was not distributed with this Chris@49: // file, You can obtain one at http://mozilla.org/MPL/2.0/. Chris@49: Chris@49: Chris@49: Chris@49: //! \addtogroup op_hist Chris@49: //! @{ Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_hist::apply(Mat& out, const mtOp& X) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: typedef typename T1::elem_type eT; Chris@49: Chris@49: const uword n_bins = X.aux_uword_a; Chris@49: Chris@49: const unwrap_check_mixed tmp(X.m, out); Chris@49: const Mat& A = tmp.M; Chris@49: Chris@49: Chris@49: uword A_n_elem = A.n_elem; Chris@49: const eT* A_mem = A.memptr(); Chris@49: Chris@49: eT min_val = priv::most_pos(); Chris@49: eT max_val = priv::most_neg(); Chris@49: Chris@49: uword i,j; Chris@49: for(i=0, j=1; j < A_n_elem; i+=2, j+=2) Chris@49: { Chris@49: const eT val_i = A_mem[i]; Chris@49: const eT val_j = A_mem[j]; Chris@49: Chris@49: if(min_val > val_i) { min_val = val_i; } Chris@49: if(min_val > val_j) { min_val = val_j; } Chris@49: Chris@49: if(max_val < val_i) { max_val = val_i; } Chris@49: if(max_val < val_j) { max_val = val_j; } Chris@49: } Chris@49: Chris@49: if(i < A_n_elem) Chris@49: { Chris@49: const eT val_i = A_mem[i]; Chris@49: Chris@49: if(min_val > val_i) { min_val = val_i; } Chris@49: if(max_val < val_i) { max_val = val_i; } Chris@49: } Chris@49: Chris@49: if(arma_isfinite(min_val) == false) { min_val = priv::most_neg(); } Chris@49: if(arma_isfinite(max_val) == false) { max_val = priv::most_pos(); } Chris@49: Chris@49: if(n_bins >= 1) Chris@49: { Chris@49: Col c(n_bins); Chris@49: eT* c_mem = c.memptr(); Chris@49: Chris@49: for(uword ii=0; ii < n_bins; ++ii) Chris@49: { Chris@49: c_mem[ii] = (0.5 + ii) / double(n_bins); // TODO: may need to be modified for integer matrices Chris@49: } Chris@49: Chris@49: c = ((max_val - min_val) * c) + min_val; Chris@49: Chris@49: out = hist(A, c); Chris@49: } Chris@49: else Chris@49: { Chris@49: out.reset(); Chris@49: } Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: //! @}