1 /* 2 * Implementations of the extended function for EIGEN lib 3 * 4 * 2014 by Jian Yang <jian.yang@uq.edu.au> 5 * 6 * This file is distributed under the GNU General Public 7 * License, Version 2. Please see the file COPYING for more 8 * details 9 */ 10 11 #include "eigen_func.h" 12 rank(VectorXf & x,VectorXf & rank)13void eigen_func::rank(VectorXf &x, VectorXf &rank) 14 { 15 int size = x.size(); 16 if(size < 1) return; 17 18 int i = 0; 19 rank.resize(size); 20 vector<float> x_sort(size); 21 for(i = 0; i < size; i++) x_sort[i] = x[i]; 22 stable_sort(x_sort.begin(), x_sort.end()); 23 map<double, int> value_indx; 24 for(i = 0; i < size; i++) value_indx.insert(pair<double,int>(x_sort[i], i+1)); 25 map<double, int>::iterator iter; 26 for(i = 0; i < size; i++){ 27 iter = value_indx.find(x[i]); 28 rank[i] = iter->second; 29 } 30 } 31 inverse_norm_rank_transform(VectorXf & x)32void eigen_func::inverse_norm_rank_transform(VectorXf &x) 33 { 34 int size = x.size(); 35 if(size < 1) return; 36 37 VectorXf rank; 38 eigen_func::rank(x, rank); 39 40 int i = 0; 41 float size_f = (float) size; 42 for(i = 0; i < size; i++) x[i] = StatFunc::qnorm((rank[i] - 0.5) / size_f); 43 }