14 double ChiSquare(T *dMat,
long int dim1,
long int dim2) {
32 rowSums =
new T[dim1];
33 for (i = 0; i < dim1; i++) {
36 for (j = 0; j < dim2; j++) {
37 rowSums[i] += dMat[idx1 + j];
39 tSum += (int)rowSums[i];
43 colSums =
new T[dim2];
44 for (i = 0; i < dim2; i++) {
46 for (j = 0; j < dim1; j++) {
47 colSums[i] += dMat[j * dim2 + i];
52 for (i = 0; i < dim1; i++) {
54 for (j = 0; j < dim2; j++) {
55 rchi += (pow((
double)dMat[i * dim2 + j], 2) / colSums[j]);
57 chi += (((double)tSum / rowSums[i]) * rchi);
70 double accum = 0.0, d;
72 for (i = 0; i < dim; i++) {
73 nInstances += tPtr[i];
76 if (nInstances != 0) {
77 for (i = 0; i < dim; i++) {
78 d = (double)tPtr[i] / nInstances;
84 return accum / log(2.0);
89 T *variableRes, *overallRes;
94 variableRes =
new T[dim1];
95 for (
long int i = 0; i < dim1; i++) {
96 long int idx1 = i * dim2;
97 variableRes[i] = (T)0.0;
98 for (
long int j = 0; j < dim2; j++) {
99 variableRes[i] += dMat[idx1 + j];
104 overallRes =
new T[dim2];
106 for (
long int i = 0; i < dim2; i++) {
107 overallRes[i] = (T)0.0;
108 for (
long int j = 0; j < dim1; j++) {
109 overallRes[i] += dMat[j * dim2 + i];
115 for (
long int i = 0; i < dim1; i++) {
117 tPtr = dMat + i * dim2;
121 for (
long int i = 0; i < dim2; i++) {
122 tSum +=
static_cast<int>(overallRes[i]);
134 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)