exocortex
exocortex

Reputation: 503

Is there a something like a sparse cube in armadillo or some way of using sparse matrices as slices in a cube?

I am using armadillos sparse matrices. But now I would like to use something like a "sparse cube" which does not exist in armadillo. writing sparse matrices into a cube with cube.slice(some_sparse_matrix) converts everything back to a dense cube.

I am using sparse matrices in order to multiply a vector with. for larger vectors/matrices the sparse variant is much faster. Now I have to sum up the multiplications of several sparse matrices with several vectors. would a std:vector be a way?

In my experience it is faster to use armadillos functions (for example a subvector or arma::span() or arma::sum() )) as opposed to write loops myself. So I was wondering what would be the fastest way of doing this.

Upvotes: 1

Views: 385

Answers (1)

hbrerkere
hbrerkere

Reputation: 1605

It's possible to approximate a sparse cube using the field class, like so.

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

Your compiler must support at least C++11 for this to work.

Upvotes: 4

Related Questions