是否可以使用 C++ Eigen 库制作一个(稀疏)矩阵,类似于我需要翻译的这个优雅的 python 代码?
(np.random.rand(100,100) < 0.1) * np.random.rand(100,100)
例如用一定比例的随机值填充的矩阵。
最佳答案
直接改编自Eigen Documentation , 而不是那么简洁:
std::default_random_engine gen;
std::uniform_real_distribution<double> dist(0.0,1.0);
int rows=100;
int cols=100;
std::vector<Eigen::Triplet<double> > tripletList;
for(int i=0;i<rows;++i)
for(int j=0;j<cols;++j)
{
auto v_ij=dist(gen); //generate random number
if(v_ij < 0.1)
{
tripletList.push_back(T(i,j,v_ij)); //if larger than treshold, insert it
}
}
SparseMatrixType mat(rows,cols);
mat.setFromTriplets(tripletList.begin(), tripletList.end()); //create the matrix
这需要 C++11 且未经测试。
关于python - 具有特征的稀疏随机矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30741884/