C++并行计算物种矩阵相对丰度并输出表格 日期: 2028-08-15 标签: 常规 {"#include" \n#include" \n#include" \n#include" \n#include" \n#include" \n#include" \n#include" <omp.h>\n\n// 函数用于拆分字符串\nstd::vectorstd::string split(const std::string& str, char delimiter) {\n std::vectorstd::string tokens;\n std::string token;\n std::istringstream tokenStream(str);\n while (std::getline(tokenStream, token, delimiter)) {\n tokens.push_back(token);\n }\n return tokens;\n}\n\nint main() {\n // 读取物种矩阵文件\n std::ifstream file("species_matrix.txt");\n if (!file) {\n std::cerr << "Error opening file." << std::endl;\n return 1;\n }\n\n // 读取列名\n std::string header;\n std::getline(file, header);\n std::vectorstd::string columnNames = split(header, '\t');\n\n // 读取行名和矩阵数据\n std::vectorstd::string rowNames;\n std::vector<std::vector> matrixData;\n std::string line;\n while (std::getline(file, line)) {\n std::vectorstd::string row = split(line, '\t');\n rowNames.push_back(row[0]);\n std::vector rowData;\n for (size_t i = 1; i < row.size(); i++) {\n rowData.push_back(std::stod(row[i]));\n }\n matrixData.push_back(rowData);\n }\n\n // 计算每行数据的和\n std::vector rowSums(matrixData.size());\n#pragma omp parallel for\n for (size_t i = 0; i < matrixData.size(); i++) {\n rowSums[i] = std::accumulate(matrixData[i].begin(), matrixData[i].end(), 0.0);\n }\n\n // 计算相对丰度\n#pragma omp parallel for\n for (size_t i = 0; i < matrixData.size(); i++) {\n for (size_t j = 0; j < matrixData[i].size(); j++) {\n matrixData[i][j] /= rowSums[i];\n }\n }\n\n // 输出结果\n std::cout << "\t";\n for (const auto& columnName : columnNames) {\n std::cout << columnName << "\t";\n }\n std::cout << std::endl;\n\n for (size_t i = 0; i < matrixData.size(); i++) {\n std::cout << rowNames[i] << "\t";\n for (const auto& value : matrixData[i]) {\n std::cout << value << "\t";\n }\n std::cout << std::endl;\n }\n\n return 0;\n}\n 原文地址: https://www.cveoy.top/t/topic/pZ9P 著作权归作者所有。请勿转载和采集! 免费AI点我,无需注册和登录