下面是一个示例代码,用于读取物种矩阵、计算相对丰度并将结果输出为矩阵表格。

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
#include <iomanip>
#include <omp.h>

using namespace std;

// 读取物种矩阵
vector<vector<int>> readSpeciesMatrix(const string& filename) {
    ifstream file(filename);
    vector<vector<int>> speciesMatrix;

    if (file) {
        string line;
        while (getline(file, line)) {
            vector<int> row;
            istringstream iss(line);
            int value;
            while (iss >> value) {
                row.push_back(value);
            }
            speciesMatrix.push_back(row);
        }
        file.close();
    } else {
        cerr << "Error: Unable to open file " << filename << endl;
    }

    return speciesMatrix;
}

// 计算相对丰度
vector<vector<double>> calculateRelativeAbundance(const vector<vector<int>>& speciesMatrix) {
    int numSpecies = speciesMatrix[0].size();
    int numSamples = speciesMatrix.size();

    vector<vector<double>> relativeAbundance(numSpecies, vector<double>(numSamples));

    #pragma omp parallel for
    for (int i = 0; i < numSpecies; i++) {
        int sum = 0;
        for (int j = 0; j < numSamples; j++) {
            sum += speciesMatrix[j][i];
        }
        for (int j = 0; j < numSamples; j++) {
            relativeAbundance[i][j] = (double)speciesMatrix[j][i] / sum;
        }
    }

    return relativeAbundance;
}

// 输出矩阵表格
void printMatrix(const vector<vector<double>>& matrix) {
    int numSpecies = matrix.size();
    int numSamples = matrix[0].size();

    cout << "Species\t";
    for (int i = 0; i < numSamples; i++) {
        cout << "Sample " << i + 1 << "\t";
    }
    cout << endl;

    for (int i = 0; i < numSpecies; i++) {
        cout << "Species " << i + 1 << "\t";
        for (int j = 0; j < numSamples; j++) {
            cout << fixed << setprecision(4) << matrix[i][j] << "\t";
        }
        cout << endl;
    }
}

int main() {
    string filename = "species_matrix.txt"; // 物种矩阵文件名
    vector<vector<int>> speciesMatrix = readSpeciesMatrix(filename);
    vector<vector<double>> relativeAbundance = calculateRelativeAbundance(speciesMatrix);
    printMatrix(relativeAbundance);

    return 0;
}

请将物种矩阵保存为名为"species_matrix.txt"的文本文件,格式如下:

1 2 3
4 5 6
7 8 9

这个示例代码使用OpenMP库进行并行计算,可以根据计算机的处理器核心数量自动分配线程。要使用OpenMP库,需要在编译时添加"-fopenmp"标志。例如,使用以下命令编译代码:

g++ -fopenmp species_matrix.cpp -o species_matrix

然后运行生成的可执行文件:

./species_matrix

输出将是一个矩阵表格,显示每个物种在每个样本中的相对丰度


原文地址: http://www.cveoy.top/t/topic/ihSx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录