如何在 C++ 中将矩阵市场文件转换为矩阵
How to convert matrix market file to matrix in c++
我有一个矩阵市场(.mtx)文件。我想要从矩阵市场文件进行稀疏矩阵转换。任何人都可以建议一种在 c++ 中将矩阵市场格式转换为二维矩阵的方法吗?
我尝试了一种 matlab 方法在线将矩阵市场转换为稀疏矩阵。但是,我没有成功。 如果我在 c++ 中获得解决方案,那将有很大帮助。因为它有助于我的项目。
可能有几种方法可以读取 .mtx 数据。我刚刚解析了文件并用数据填充了矩阵。请在下面找到代码片段:
std::ifstream file("filaname.mtx");
int num_row, num_col, num_lines;
// Ignore comments headers
while (file.peek() == '%') file.ignore(2048, 'n');
// Read number of rows and columns
file >> num_row>> num_col >> num_lines;
// Create 2D array and fill with zeros
double* matrix;
matrix = new double[num_row * num_col];
std::fill(matrix, matrix + num_row *num_col, 0.);.
// fill the matrix with data
for (int l = 0; l < num_lines; l++)
{
double data;
int row, col;
file >> row >> col >> data;
matrix[(row -1) + (col -1) * num_row] = data;
}
file.close();
我希望它有所帮助。
如果没有关于您的代码或目标的更多信息,很难确切地说出什么效果最好。如果您使用的是这种格式,我会建议与此类似。
在std::ifstream
中打开文件,然后一次将一行行放入具有std::getline()
的std::string
中进行处理。如果您知道该行具有所需的值,我还建议您将其转换为std::stringstream
以便您可以使用>>
运算符提取值。
- 假设 Matrux 市场文件的标题以"%%"开头,
std::string::find()
可以让您确定您读取的行是否是标题。您可以转换为字符串流并解析字符串以获取有关文件的信息,例如"矩阵坐标实则通用"或其他信息,如果您关心这些。 - 每个注释都以"%"开头 - 如果您在字符串的开头找到此字符,则可以忽略它并阅读下一个。
- 第一个非注释行是 3 个数字:行、列和条目。使用字符串流解析这些内容;您将使用它们为阵列分配内存。获得尺寸后,此问题及其答案描述了一些动态分配所需空间的好方法。
- 随后的每一行都描述数组条目的坐标和值。您可以读取前两个数字并将其用作 2D 数组的索引,然后使用第三个数字作为此时的条目。
或者,您可以切换到 C,它有一个专用于 Matrix Market I/O 的库。
美国国家标准与技术研究院提供了可以执行您正在寻找的文件操作的 C 代码。它还具有 C 语言中的读写操作示例。由于 C 代码与C++兼容,因此您可以在正在处理的项目中使用此代码。 https://math.nist.gov/MatrixMarket/mmio-c.html
fast_matrix_market库有一个加载器,可以完全满足你的需要:
std::ifstream file("filename.mtx");
std::vector<double> matrix;
int64_t nrows, ncols; // the file's dimensions saved here
fast_matrix_market::read_matrix_market_array(
file,
nrows, ncols,
matrix,
fast_matrix_market::row_major);
这将适用于稀疏和密集的MatrixMarket文件。
相关文章:
- 将生成文件转换为 CMakeLists.txt等效项
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 如何使用 CreateProcess 调用 tshark 将捕获文件转换为 txt
- 使用emscripten将c++文件转换为wasm时出错
- 将Qt qml文件转换为位图图像
- (对于C++)读取类型从文件转换为 2D 数组
- 使用向量将字符串从C 中的文件转换
- 编写一个 C++ 程序以将文本文件转换为 HTML 文件
- 如何在 C++ 中将矩阵市场文件转换为矩阵
- 是否可以将信息从XML文件转换为CPP
- 将 ASCII 文件转换为 C++ 的二进制格式
- 将生成文件转换为CMakeLists;无法加载共享库
- FlatBuffers:未支撑的工会向量错误将JSON文件转换为二进制文件
- 如何使用 qt 将 Linux 文本文件转换为 Windows 文本文件
- 如何将可执行文件转换为 C++ 文件以达到代码峰值
- 将windows软件中的未知数据库文件转换为MySqli数据库
- 如何将 .npy 文件转换为 .binaryproto
- 使用ICEBuilder将ICE文件转换为C++
- 将文件转换为字符串数组C++
- 在编译时将文本文件转换为字符串