犰狳中是不是有类似稀疏立方体的东西,或者使用稀疏矩阵作为立方体中的切片的某种方式?

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 才能工作。

【讨论】:

以上是关于犰狳中是不是有类似稀疏立方体的东西,或者使用稀疏矩阵作为立方体中的切片的某种方式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在犰狳中更新稀疏矩阵的值

如何在犰狳中按元素划分2个稀疏矩阵?

犰狳中的稀疏 svd (C++)

将犰狳中的矩阵从稀疏转换为密集(spmat 到 mat)

C++犰狳稀疏矩阵类型转换

如何从 C++(带有犰狳)代码链接到 PETSc?