我尝试使用Armadillo
中的C++
加载此matrix。
这是我的简单代码:
#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;
}
在编译时,代码不会生成任何警告,但是当我运行可执行文件时,这是输出:
警告:SpMat :: load():不支持的文件类型
警告:SpMat :: load():无法读取./matrix/cfd1.mat
我尝试用arma::raw_ascii
来更改arma::hdf5_binary
,但是效果不一样。
我认为这不是重复的,因为问题不是文件的标题。即使我使用arma::auto_detect
,问题仍然存在。
如果我使用mat
类型,就没有问题。
答案 0 :(得分:0)
以所谓的“矩阵市场”格式下载矩阵:https://sparse.tamu.edu/MM/Rothberg/cfd1.tar.gz
从.tar.gz存档中提取矩阵,以获得cfd1/cfd1.mtx
。该文件具有一个标头,必须先将其剥离,然后才能加载该文件。使用文本编辑器删除mtx文件中的前14行。第一行应包含1 1 1
。用相同的名称保存编辑后的文件。
使用coord_ascii
选项将编辑的矩阵文件加载到Armadillo中。您将需要支持coord_ascii
(版本9.400似乎有效)的Armadillo的最新版本。
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);