c++ - 用 Armadillo C++ 加载稀疏矩阵

标签 c++ sparse-matrix armadillo

我正在尝试加载这个 matrixC++ 中使用 Armadillo。 这是我的简单代码:

#include <string>
#include <vector>
#include <iostream>
#include <armadillo>

int main(void) {

  arma::sp_mat matrix;
  matrix.load("./matrix/cfd1.mat", arma::raw_ascii);
  
  return 0;
}

在编译时,代码不会生成任何警告,但是当我运行可执行文件时,这是输出:

warning: SpMat::load(): unsupported file type

warning: SpMat::load(): couldn't read ./matrix/cfd1.mat

我尝试用 arma::hdf5_binary 更改 arma::raw_ascii,但效果不一样。

编辑

我认为这不是重复的,因为问题不在于文件的标题。即使我使用 arma::auto_detect 问题仍然存在。 如果我使用 mat 类型,问题就不存在了。

最佳答案

以所谓的“矩阵市场”格式下载矩阵:https://sparse.tamu.edu/MM/Rothberg/cfd1.tar.gz

从 .tar.gz 存档中提取矩阵,获得 cfd1/cfd1.mtx。该文件有一个标题,必须在加载文件之前将其删除。使用文本编辑器,删除 mtx 文件中的前 14 行。第一行应该有 1 1 1。以相同的名称保存编辑后的文件。

使用 coord_ascii 在 Armadillo 中加载编辑后的矩阵文件选项。您将需要支持 coord_ascii 的 Armadillo 的最新版本(9.400 版本似乎可以工作)。

sp_mat X;
X.load("cfd1/cfd1.mtx", coord_ascii);

在 Armadillo 矩阵索引中从 0 开始(由于 C++ 约定),而在矩阵市场文件中它们从 1 开始。因此您需要从 X 中删除第一行和第一列以获取此考虑到。这可以通过 submatrices 完成:

X = X.tail_rows(X.n_rows-1);
X = X.tail_cols(X.n_cols-1);

关于c++ - 用 Armadillo C++ 加载稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56277268/

相关文章:

c++ - 如何在 C++ 中创建包含从 0 到 N 的元素的行 vector ?

c++ - 如何使用 Armadillo 在不同的计算机上创建相同的随机数?

c++ - g++/minGW 可以与 Windows SDK 配合使用吗? Visual Studio 是唯一的选择吗?

c++ - ComputeLibrary 数据类型模板

c++ - 处理 vector 时如何为 find 和 find_if 使用正确的指针

algorithm - 高效求解稀疏矩阵

installation - 在没有 root 权限的情况下安装 liblapack? (试图让 Armadillo /Lapack/Blas 工作)

c++ - 如何将括号中的字符串解析为具有给定定界符的字符串列表

R - 逻辑回归 - 稀疏矩阵

r - cbind 多个稀疏矩阵时获取 "node stack overflow"