我有一个Matrix market(.mtx)文件。我想要从矩阵市场文件进行稀疏矩阵转换。谁能建议一种将矩阵市场格式转换为c ++的二维矩阵的方法?
我尝试了一种matlab方法将在线矩阵市场转换为稀疏矩阵。但是,我没有成功。 如果我用c ++解决方案,那将有很大的帮助。因为它对我的项目有帮助。
答案 0 :(得分:1)
可能有几种读取.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();
希望对您有帮助。
答案 1 :(得分:1)
在没有有关代码或目标的更多信息的情况下,很难确切地说出最有效的方法。如果您using this format,,我会建议类似的内容。
在std::ifstream
中打开文件,然后一次将一行插入std::string
到std::getline()
中进行处理。如果您知道该行具有所需的值,我也建议您将其转换为std::stringstream
,以便可以使用>>
运算符来提取值。
std::string::find()
可让您确定所读取的行是否为标题。您可以转换为stringstream并解析字符串以获取有关文件的信息,例如“矩阵坐标实数一般”或其他(如果您对此很在意的话)。Or, you could switch to C, which has a library dedicated to Matrix Market I/O.
答案 2 :(得分:0)
美国国家标准技术研究院提供C代码,可以执行您要查找的文件操作。它还具有使用C进行读写操作的示例。由于C代码与C ++兼容,因此您可以在正在处理的项目中使用此代码。 https://math.nist.gov/MatrixMarket/mmio-c.html