Enr*_*rba 2 c++ sparse-matrix armadillo
我有一个非常稀疏的矩阵,密度约为0.01
,维度为20000 x 500000
。我正在尝试在犰狳中加载它
sp_mat V;
V.load(filename, coord_ascii);
Run Code Online (Sandbox Code Playgroud)
文件格式为
row column value
Run Code Online (Sandbox Code Playgroud)
但这花费的时间太长了。Python可以解析该文件,并填写一本字典用它的方式快于犰狳可以创建这个矩阵。我应该如何正确地做到这一点?
矩阵将填充整数。
任何意见,将不胜感激!
这是犰狳独有的问题。当逐行读取时,C++ 可以毫无问题地迭代文件,但是将值分配给 anarma::sp_mat
的速度非常慢。
犰狳文档指定
“使用批量插入构造函数通常比使用元素访问运算符连续插入值快得多”
所以这是我能想到的最好的
sp_mat get(const char *filename) {
vector<long long unsigned int> location_u;
vector<long long unsigned int> location_m;
vector<double> values;
ifstream file(filename);
int a, b, c;
while(file >> a >> b >> c) {
location_u.push_back(a);
location_m.push_back(b);
values.push_back(c);
}
umat lu(location_u);
umat lm(location_m);
umat location(join_rows(lu, lm).t());
return V(location, vec(values));
}
Run Code Online (Sandbox Code Playgroud)
它现在以合理的速度运行,大约每秒 100 万行。