矩阵连乘问题,生成需要的矩阵

   任务是这样子的:我们先完成txt文本矩阵的准备,大概做了50个矩阵;

 代码如下:

  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <random>
  5. #include <string>
  6. #include <windows.h> // 包含 Windows API 头文件
  7. // 创建文件夹(仅适用于 Windows)
  8. bool createDirectory(const std::string& folderName) {
  9.     BOOL result = CreateDirectory(folderName.c_str(), NULL);
  10.     return result != 0;
  11. }
  12. // 生成一个随机矩阵
  13. std::vector<std::vector<int>> generateMatrix(int rows, int cols) {
  14.     std::random_device rd;
  15.     std::mt19937 gen(rd());
  16.     std::uniform_int_distribution<int> dis(1, 10);
  17.     
  18.     std::vector<std::vector<int>> matrix(rows, std::vector<int>(cols, 0));
  19.     
  20.     for (int i = 0; i < rows; ++i) {
  21.         for (int j = 0; j < cols; ++j) {
  22.             matrix[i][j] = dis(gen);
  23.         }
  24.     }
  25.     
  26.     return matrix;
  27. }
  28. // 保存矩阵到文本文件
  29. void saveMatrixToFile(const std::vector<std::vector<int>>& matrix, const std::string& filename) {
  30.     std::ofstream file(filename);
  31.     
  32.     if (file.is_open()) {
  33.         for (const auto& row : matrix) {
  34.             for (const auto& element : row) {
  35.                 file << element << " ";
  36.             }
  37.             file << "\n";
  38.         }
  39.         
  40.         file.close();
  41.         std::cout << "Matrix saved to file: " << filename << std::endl;
  42.     } else {
  43.         std::cerr << "Failed to open file: " << filename << std::endl;
  44.     }
  45. }
  46. int main() {
  47.  
  48.     // 文件夹名称
  49.     std::string folderName = "50_matrices";
  50.     
  51.     // 创建文件夹
  52.      bool success = createDirectory(folderName);
  53.      if (success) {
  54.          std::cout << "Folder created: " << folderName << std::endl;
  55.      } else {
  56.          std::cerr << "Failed to create folder: " << folderName << std::endl;
  57.          return 1;
  58.      }
  59.      
  60.    // fs::create_directory(folderName);
  61.     //std::filesystem::create_directory(folderName);
  62.     
  63.     int numMatrices = 50;
  64.     std::random_device rd;
  65.     std::mt19937 gen(rd());
  66.     std::uniform_int_distribution<int> dis(1, 20); // 设置矩阵的行列数范围
  67.     
  68.     std::vector<std::vector<int>> prevMatrix;
  69.     
  70.     for (int i = 1; i <= numMatrices; ++i) {
  71.         // 确定文件名和路径
  72.         std::string filename = folderName + "/M" + std::to_string(i) + ".txt";
  73.         
  74.         int rows, cols;
  75.         if (prevMatrix.empty()) {
  76.             // 第一个矩阵可以是任意维度
  77.             rows = dis(gen);
  78.             cols = dis(gen);
  79.         } else {
  80.             // 后续矩阵的行数等于前一个矩阵的列数
  81.             rows = prevMatrix[0].size();
  82.             cols = dis(gen);
  83.         }
  84.         
  85.         std::vector<std::vector<int>> matrix = generateMatrix(rows, cols);
  86.         saveMatrixToFile(matrix, filename);
  87.         
  88.         prevMatrix = matrix;
  89.     }
  90.     
  91.     return 0;
  92. }

 

这样就会生成一个矩阵;

 

当然,另一个是后来看到格式:第一行为  矩阵行数row 矩阵列数col

 

#include <iostream>
#include <fstream>
#include <vector>
#include <random>
#include <string>
#include <windows.h> // 包含 Windows API 头文件

// 创建文件夹(仅适用于 Windows)
bool createDirectory(const std::string& folderName) {
BOOL result = CreateDirectory(folderName.c_str(), NULL);
return result != 0;
}

// 生成一个随机矩阵
std::vector<std::vector<int>> generateMatrix(int rows, int cols) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dis(1, 10);

std::vector<std::vector<int>> matrix(rows, std::vector<int>(cols, 0));

for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
matrix[i][j] = dis(gen);
}
}

return matrix;
}

// 保存矩阵到文本文件
void saveMatrixToFile(const std::vector<std::vector<int>>& matrix, const std::string& filename) {
std::ofstream file(filename);

if (file.is_open()) {
// 写入矩阵行数和列数
file << "矩阵行数" << matrix.size() << " " << "矩阵列数" << matrix[0].size() << std::endl;
//file << "矩阵的列数col: " << cols << "\n";

//file << matrix.size() << " " << matrix[0].size() << "\n";

// 写入矩阵数据
for (const auto& row : matrix) {
for (const auto& element : row) {
file << element << " ";
}
file << "\n";
}

file.close();
std::cout << "Matrix saved to file: " << filename << std::endl;
} else {
std::cerr << "Failed to open file: " << filename << std::endl;
}
}

 

int main() {

// 文件夹名称
std::string folderName = "50_matrices";

// 创建文件夹
bool success = createDirectory(folderName);
if (success) {
std::cout << "Folder created: " << folderName << std::endl;
} else {
std::cerr << "Failed to create folder: " << folderName << std::endl;
return 1;
}

// fs::create_directory(folderName);
//std::filesystem::create_directory(folderName);

int numMatrices = 50;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dis(1, 20); // 设置矩阵的行列数范围

std::vector<std::vector<int>> prevMatrix;

for (int i = 1; i <= numMatrices; ++i) {
// 确定文件名和路径
std::string filename = folderName + "/M" + std::to_string(i) + ".txt";

int rows, cols;
if (prevMatrix.empty()) {
// 第一个矩阵可以是任意维度
rows = dis(gen);
cols = dis(gen);
} else {
// 后续矩阵的行数等于前一个矩阵的列数
rows = prevMatrix[0].size();
cols = dis(gen);
}

std::vector<std::vector<int>> matrix = generateMatrix(rows, cols);
saveMatrixToFile(matrix, filename);

prevMatrix = matrix;
}

return 0;
}

 

OK,剩下的矩阵连乘再接着写喽;

posted on 2023-10-09 23:19  南山水北  阅读(17)  评论(0)    收藏  举报