【问题标题】:How to convert matrix market file to matrix in c++如何在 C++ 中将矩阵市场文件转换为矩阵
【发布时间】:2019-07-17 12:26:39
【问题描述】:

我有一个 Matrix market(.mtx) 文件。我想从矩阵市场文件中进行稀疏矩阵转换。任何人都可以建议一种将矩阵市场格式转换为 C++ 中的二维矩阵的方法吗?

我尝试了 matlab 方法在线将矩阵市场转换为稀疏矩阵。但是,我没有成功。 如果我能在 C++ 中找到解决方案,那将是非常有帮助的。因为它对我的项目有帮助。

【问题讨论】:

  • 你必须证明你自己有一些努力。发表您自己用 C++ 编写此 cide 的尝试,有人会帮助您解决问题。我认为您不太可能让某人为您编写代码。这不是这里的工作方式。
  • 除此之外,您还不清楚二维矩阵是什么意思。有很多不同的方法可以在 C++ 中创建 2d 矩阵,所以如果你展示你自己的代码,每个人都会清楚你的目标是什么。
  • 我想要一个一般的矩阵市场格式转换,没有特定于我正在使用的代码。这就是我没有发布任何代码的原因。对不起,如果你没有得到我的问题。我已经努力尝试在线使用matlab进行转换。但它不支持我上传的矩阵文件的大小。所以我想要一种不同的方法。我从 Sumit Jha(下)那里得到了答案。谢谢。

标签: c++ matrix sparse-matrix


【解决方案1】:

可能有多种方法可以读取 .mtx 数据。我刚刚解析了文件并用数据填充了矩阵。请在下面找到代码 sn-p:

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();

希望对你有帮助。

【讨论】:

    【解决方案2】:

    如果没有关于您的代码或目标的更多信息,很难确切地说出哪种方法最有效。如果你是using this format,,我会建议类似的东西。

    std::ifstream 中打开文件,然后将一行一行的放入std::stringstd::getline() 进行处理。如果您知道该行具有您想要的值,我还建议将其转换为 std::stringstream,以便您可以使用 &gt;&gt; 运算符来提取值。

    1. 鉴于 Matrux 市场文件的标题以 '%%' 开头,std::string::find() 可让您确定您所读取的行是否为标题。如果您关心这些,您可以转换为字符串流并解析字符串以获取有关文件的信息,例如“矩阵坐标实数”或其他信息。
    2. 每条注释都以 '%' 开头 - 如果您在字符串的开头找到该字符,则可以忽略它并阅读下一个。
    3. 第一个非注释行是 3 个数字:行、列和条目。用字符串流解析这些;您将使用它们为您的数组分配内存。确定尺寸后,This question 及其答案将描述一些动态分配所需空间的好方法。
    4. 随后的每一行都描述了数组条目的坐标和值。您可以读取前两个数字并将它们用作二维数组的索引,然后将第三个数字用作该点的条目。

    Or, you could switch to C, which has a library dedicated to Matrix Market I/O.

    【讨论】:

    • 感谢您提供详细信息。我认为这是对我从 Sumit Jha 获得的代码的最佳解释。
    【解决方案3】:

    美国国家标准与技术研究院提供的 C 代码可以执行您正在寻找的文件操作。它还包含 C 中读写操作的示例。由于 C 代码与 C++ 兼容,因此您可以在您正在处理的项目中使用此代码。 https://math.nist.gov/MatrixMarket/mmio-c.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      相关资源
      最近更新 更多