首页 > 解决方案 > C++ 相当于 Python 的 scipy.sparse.rand

问题描述

scipy.sparse.rand我需要 Python函数的 C++ 等效项( https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.rand.html)。我将输入m, n, density参数,rand()函数将为我生成一个矩阵(最好是 COO 矩阵)。我该怎么做?

标签: c++scipystlsparse-matrix

解决方案


如果boost您手头有的话,使用boost-ublasboost-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;
}

推荐阅读