C ++ эквивалент Python's scipy.sparse.rand - PullRequest
0 голосов
/ 20 июня 2019

Мне нужен C ++ эквивалент функции scipy.sparse.rand Python (https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.rand.html)., я введу m, n, density параметры, а функция rand() сгенерирует для меня матрицу (предпочтительно COO-матрицу). Как я могу это сделать?

1 Ответ

0 голосов
/ 21 июня 2019

Если у вас на руках boost, возможно, было бы неплохо использовать комбинацию boost-ublas и boost-random для выполнения этой работы.Для этого вам необходимо заранее установить библиотеки boost .

Вы можете оптимизировать код, если заранее знаете количество ненулевых элементов.

Вы можете посмотретькод работы по адресу: https://coliru.stacked -crooked.com / a / 097ea92bb336c774

#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_01.hpp>

int main() {
    int rows{ 4 };
    int cols{ 4 };
    double density{ 0.25 };
    boost::random::uniform_01<> dist;
    boost::random::mt19937 gen;

    boost::numeric::ublas::mapped_matrix<double> m(rows, cols, 3 * 3);
    for (unsigned i = 0; i < m.size1(); ++i)
        for (unsigned j = 0; j < m.size2(); ++j)
            if (dist(gen)>density) m(i, j) = dist(gen);

    std::cout << m << std::endl;
}
...