13 template<
class T>
double ChiSquare(T *dMat,
long int dim1,
long int dim2) {
29 rowSums =
new T[dim1];
30 for (i = 0; i < dim1; i++) {
33 for (j = 0; j < dim2; j++) {
34 rowSums[i] += dMat[idx1 + j];
36 tSum += (int)rowSums[i];
40 colSums =
new T[dim2];
41 for (i = 0; i < dim2; i++) {
43 for (j = 0; j < dim1; j++) {
44 colSums[i] += dMat[j*dim2 + i];
49 for ( i = 0; i < dim1; i++) {
51 for (j = 0; j < dim2; j++) {
52 rchi += (pow((
double)dMat[i*dim2 + j], 2)/colSums[j]);
54 chi += ( ((double)tSum/rowSums[i])*rchi );
69 nInstances += tPtr[i];
74 d = (double)tPtr[i]/nInstances;
80 return accum/log(2.0);
84 T *variableRes, *overallRes;
89 variableRes =
new T[dim1];
90 for(
long int i=0;i<dim1;i++){
91 long int idx1 = i*dim2;
92 variableRes[i] = (T)0.0;
93 for(
long int j=0;j<dim2;j++){
94 variableRes[i] += dMat[idx1+j];
99 overallRes =
new T[dim2];
101 for(
long int i=0;i<dim2;i++){
102 overallRes[i] = (T)0.0;
103 for(
long int j=0;j<dim1;j++){
104 overallRes[i] += dMat[j*dim2+i];
110 for(
long int i=0;i<dim1;i++) {
112 tPtr = dMat + i*dim2;
116 for(
long int i=0;i<dim2;i++){
117 tSum +=
static_cast<int>(overallRes[i]);
129 delete [] overallRes;
130 delete [] variableRes;
Class used to rank bits based on a specified measure of infomation.
double InfoEntropyGain(T *dMat, long int dim1, long int dim2)
double ChiSquare(T *dMat, long int dim1, long int dim2)
double InfoEntropy(T *tPtr, long int dim)