C++ 用犰狳C+加载稀疏矩阵+;

C++ 用犰狳C+加载稀疏矩阵+;,c++,sparse-matrix,armadillo,C++,Sparse Matrix,Armadillo,我试图使用C++中的Armadillo加载此文件。 这是我的简单代码: #include <string> #include <vector> #include <iostream> #include <armadillo> int main(void) { arma::sp_mat matrix; matrix.load("./matrix/cfd1.mat", arma::raw_ascii); ret

我试图使用
C++
中的
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;
}
#包括
#包括
#包括
#包括
内部主(空){
arma::sp_mat矩阵;
矩阵加载(“./matrix/cfd1.mat”,arma::原始ascii);
返回0;
}
在编译时,代码不会生成任何警告,但当我运行可执行文件时,这是输出:

警告:SpMat::load():不支持的文件类型

警告:SpMat::load():无法读取。/matrix/cfd1.mat

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

编辑 我认为这不是重复,因为问题不是文件的头。即使我使用
arma::auto_detect
这个问题仍然存在。
如果我使用类型
mat
则问题不存在。

以所谓的“矩阵市场”格式下载矩阵:

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

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

在ARMADILO矩阵指数中,P>0(由于C++约定),而在矩阵市场文件中,它们开始于1。因此,您需要从
X
中删除第一行和第一列来考虑这一点。这可以通过以下方式完成:


以所谓的“矩阵市场”格式下载矩阵:

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

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

在ARMADILO矩阵指数中,P>0(由于C++约定),而在矩阵市场文件中,它们开始于1。因此,您需要从
X
中删除第一行和第一列来考虑这一点。这可以通过以下方式完成:


TL;DR:
raw\u ascii
仅在MATLAB矩阵使用
-ascii
保存时有效
hdf5\u binary
仅当矩阵从MATLAB导出为hdf5时才起作用。这里可下载的
.mat
也不适用。@MaxLanghof在哪里可以找到正确的文件头?@MaxLanghof我刚刚编辑了这个问题,没有重复。在我看来,你认为能解决问题的问题毫无共同之处;DR:
raw\u ascii
仅在MATLAB矩阵使用
-ascii
保存时有效
hdf5\u binary
仅当矩阵从MATLAB导出为hdf5时才起作用。这里可下载的
.mat
也不适用。@MaxLanghof在哪里可以找到正确的文件头?@MaxLanghof我刚刚编辑了这个问题,没有重复。在我看来,你认为解决问题的问题没有任何共同之处
sp_mat X;
X.load("cfd1/cfd1.mtx", coord_ascii);
X = X.tail_rows(X.n_rows-1);
X = X.tail_cols(X.n_cols-1);