Blame view

src/basic_functions.h 2.82 KB
0d840342   David Mayerich   public release co...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  #include <stdio.h>
  
  
  size_t* sortIndx(float* input, size_t size){
  	//sort indices of score in ascending order (fitness value)
  	size_t *idx; 
  	idx = (size_t*) malloc (size * sizeof (size_t));
  	for (size_t i = 0; i < size; i++)
  		idx[i] = i;    
  		 	
  	for (size_t i=0; i<size; i++){
  		for (size_t j=i+1; j<size; j++){
  			if (input[idx[i]] < input[idx[j]]){
  				std::swap (idx[i], idx[j]);    //float check : it was like this b(&idx[i], &idx[j]) but gave me error
  			}
  		}
  	}				 
  	return idx; //use as sortSIdx in selection
  }
  
  	
  template<typename T>
  void mtxMul(T* M3, T* M1, T* M2, size_t r1, size_t c1, size_t r2, size_t c2){
     //compute output matrix M3 of size row1 X column2 and data is column major		 
  	for(size_t i = 0 ; i <r1; i++){								
  		for(size_t j = 0; j< c2; j++){
  			T temp = 0;
  			for(size_t k = 0; k < c1 ; k++){					//column1 = row2 for matrix multiplication
  				temp+= M1[i * c1  + k] * M2[k * c2 + j];			//compute an element of output matrix
  			}       
  			M3[i * c1 + j] = temp;								//copy an element to output matrix
  		}
  	}
  }
  
  template<typename T>
  void mtxMultranspose(T* M3, T* M1, T* M2, size_t r1, size_t c1, size_t r2, size_t c2){
     //compute output matrix M3 of size row1 X column2 and data is column major
  	for(size_t i = 0 ; i <r1; i++){								
  		for(size_t j = 0; j< r2; j++){		
  			T temp = 0;
  			for(size_t k = 0; k < c1 ; k++){					//column1 = row2 for matrix multiplication
  				temp+= M1[i * c1 + k] * M2[j * c2 + k];			//compute an element of output matrix
  			}    
  			M3[i * r1 + j] = temp;								//copy an element to output matrix		
  		}	
  	}		
  }
  
  		//display within class scatter
  template<typename T>
  void displayS(T* sw, size_t f){
  
  	for(size_t g = 0; g<1; g++){
  		std::cout<<std::endl;
  		for(size_t j = 0; j < f; j++){										//total number of features in a gnome
  				for(size_t k = 0; k < f; k++){						    //total number of features in a gnome	
  					std::cout<<sw[g*f*f + j*f + k]<<"  ";
  		}
  	    std::cout<<std::endl;
  		}
  	}
   	std::cout<<std::endl;
  }
  
  //sort eigenvalues from lapacke results
  size_t* sortEigenVectorIndx(float* eigenvalue, size_t N){
  		//sort indices of score in ascending order (fitness value)
  		size_t *idx = (size_t*) malloc (N * sizeof (size_t));
  		for (size_t i = 0; i < N; i++)
  			idx[i] = i;    
  		 	
  		for (size_t i=0; i<N; i++){
  			for (size_t j=i+1; j<N; j++){
  				if (eigenvalue[idx[i]] > eigenvalue[idx[j]]){
  					std::swap (idx[i], idx[j]);    //float check : it was like this b(&idx[i], &idx[j]) but gave me error
  				}
  			}
  		}
  
  		std::cout<<"best                                                                                                                                                                                                                                                                      eigenvalue index: "<<eigenvalue[idx[0]]<<std::endl;
   
  		return idx; //use as sortSIdx in selection
  
  }