C++ 将稀疏矩阵向量mult的结果存储到预先分配的向量中

C++ 将稀疏矩阵向量mult的结果存储到预先分配的向量中,c++,eigen,C++,Eigen,我正在编写一个稀疏矩阵向量乘法例程,并希望使用Eigen3库创建一个参考性能基准。我只想对实际的算法进行基准测试,而不需要在结果向量的构造中涉及内存分配。如何做到这一点 我试图将结果分配给预先分配的向量,但是Eigen::internal::set_是\u malloc_允许的显示尽管我做了所有尝试,还是执行了一些内存分配 //设置被乘数 常量特征::SparseMatrix A=createMat(); 常量本征::向量xd x=本征::向量xd::随机数(列数); //预分配结果向量 特征:

我正在编写一个稀疏矩阵向量乘法例程,并希望使用Eigen3库创建一个参考性能基准。我只想对实际的算法进行基准测试,而不需要在结果向量的构造中涉及内存分配。如何做到这一点

我试图将结果分配给预先分配的向量,但是
Eigen::internal::set_是\u malloc_允许的
显示尽管我做了所有尝试,还是执行了一些内存分配

//设置被乘数
常量特征::SparseMatrix A=createMat();
常量本征::向量xd x=本征::向量xd::随机数(列数);
//预分配结果向量
特征::VectorXd y=特征::VectorXd::零(行数);
Eigen::internal::set_是_malloc_允许的(false);
y=A*x;// 试试这个:

y.noalias()=A*x


noalias()向Eigen指出不存在潜在的混叠问题(即y与x不重叠),Eigen不应创建临时的。

Spot on!Eigen文档实际上在其章节中提供了这些信息。矩阵产品需要
noalias()
来抑制与矩阵加法不同的临时性。