C++ 代码实现数据矩阵列间 MIC 系数计算并输出结果
#include
using namespace std;
int main (int argc, char **argv) { int n = 7; double x[] = {1.,2.,3.,4.,5.,6.,7.}; double y[] = {1.,2.,3.,4.,3.,2.,1.};
/* build the MINE object */ MINE mine(0.6, 15, EST_MIC_APPROX);
/* compute score */ mine.compute_score(x, y, n);
/* print MIC */ cout << "MIC: " << mine.mic() << "\n";
// Read data matrix from file ifstream inputFile("data.txt"); if (!inputFile) { cerr << "Error opening file." << endl; return 1; }
vector<vector
string line; getline(inputFile, line); // Read the first line (column names) stringstream ss(line); string colName; while (ss >> colName) { colNames.push_back(colName); }
while (getline(inputFile, line)) { stringstream ss(line); string rowName; ss >> rowName; rowNames.push_back(rowName);
vector<double> row;
double value;
while (ss >> value) {
row.push_back(value);
}
data.push_back(row);
}
inputFile.close();
// Calculate MIC for each pair of columns
int numCols = data[0].size();
vector<vector
for (int i = 0; i < numCols; i++) { for (int j = i + 1; j < numCols; j++) { double* x = &data[0][i]; double* y = &data[0][j]; int n = data.size();
mine.compute_score(x, y, n);
micMatrix[i][j] = mine.mic();
}
}
// Write MIC matrix to file ofstream outputFile("mic_matrix.txt"); if (!outputFile) { cerr << "Error opening file." << endl; return 1; }
for (int i = 0; i < numCols; i++) { for (int j = 0; j < numCols; j++) { outputFile << micMatrix[i][j] << " "; } outputFile << endl; }
outputFile.close();
return 0; }
原文地址: https://www.cveoy.top/t/topic/fUjr 著作权归作者所有。请勿转载和采集!