犰狳中是不是有类似稀疏立方体的东西,或者使用稀疏矩阵作为立方体中的切片的某种方式?
Posted
技术标签:
【中文标题】犰狳中是不是有类似稀疏立方体的东西,或者使用稀疏矩阵作为立方体中的切片的某种方式?【英文标题】: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() )比自己编写循环更快。所以我想知道最快的方法是什么。
【问题讨论】:
【参考方案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 才能工作。
【讨论】:
以上是关于犰狳中是不是有类似稀疏立方体的东西,或者使用稀疏矩阵作为立方体中的切片的某种方式?的主要内容,如果未能解决你的问题,请参考以下文章