【问题标题】: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 才能工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      相关资源
      最近更新 更多