【发布时间】:2017-04-20 04:41:05
【问题描述】:
我有一个非常稀疏的矩阵,密度约为0.01,维度为20000 x 500000。我正在尝试将其加载到犰狳中
sp_mat V;
V.load(filename, coord_ascii);
文件格式为
row column value
但这需要的时间太长了。 Python 可以比犰狳创建这个矩阵更快地解析文件并用它填充字典方式。我应该如何正确地做到这一点?
矩阵将被整数填充。
任何建议将不胜感激!
更新:
这只是犰狳独有的问题。 C++ 在逐行读取时会毫无问题地迭代文件,但是将值分配给arma::sp_mat 非常慢。
【问题讨论】:
-
在 C++ 和 Python 中处理稀疏矩阵非常不同。由于您的矩阵非常大,因此在 C++ 中这将需要一些时间。
-
但我不明白为什么会有如此巨大的差异。使用 C++ 时,速度几乎降低了 100 倍。我觉得导入 Python C API 来调用 Python 函数会更快,该函数可以将映射返回到 C++,然后使用映射创建稀疏矩阵。这不仅仅是犰狳:当我使用 ifstream 时,我也遇到了同样的减速。
-
那么这是鸡和蛋的问题:/我无法以
arma_binary格式保存,因为我需要先构建矩阵然后调用保存。但我也无法加载矩阵,因为我需要arma_binary格式。
标签: c++ sparse-matrix armadillo