【问题标题】:Is there a something like a sparse cube in armadillo or some way of using sparse matrices as slices in a cube?犰狳中是否有类似稀疏立方体的东西,或者使用稀疏矩阵作为立方体中的切片的某种方式?
【发布时间】:2019-07-19 18:01:20
【问题描述】:
我正在使用犰狳稀疏矩阵。但现在我想使用像犰狳中不存在的“稀疏立方体”之类的东西。使用 cube.slice(some_sparse_matrix) 将稀疏矩阵写入立方体会将所有内容转换回密集立方体。
我使用稀疏矩阵来与向量相乘。对于较大的向量/矩阵,稀疏变体要快得多。现在我必须总结几个稀疏矩阵与几个向量的乘法。
std:vector 会是一种方式吗?
根据我的经验,使用 armadillos 函数(例如 subvector 或 arma::span() 或 arma::sum() )比自己编写循环更快。所以我想知道最快的方法是什么。
【问题讨论】:
标签:
c++
sparse-matrix
cube
armadillo
【解决方案1】:
可以使用field class 来近似稀疏立方体,就像这样。
arma::uword number_of_matrices = 10;
arma::uword number_of_rows = 5000;
arma::uword number_of_cols = 5000;
arma::field<arma::sp_mat> F(number_of_matrices);
F.for_each( [&](arma::sp_mat& X) { X.set_size(number_of_rows, number_of_cols); } );
F(0)(1,2) = 456.7; // write to element (1,2) in matrix 0
F(1)(2,3) = 567.8; // write to element (2,3) in matrix 1
F.print("F:"); // show all matrices
您的编译器必须至少支持 C++11 才能工作。