本征:稀疏矩阵与密集向量的乘积在迭代时缓慢

问题描述

这是我的新库“ Epigraph”中出现的一个问题,该库使用Eigen对凸问题进行建模并与求解程序进行接口。 The original issue on github已经很好地描述了正在发生的事情,但我将总结一下:

我有多个功能模板,这些模板以特征类型为输入,然后按行和列对其进行迭代:

template <typename Derived>
std::vector<Constraint> lessthan(const Scalar &lhs,const Eigen::MatrixBase<Derived> &rhs)
{
    std::vector<Constraint> constraints;

    for (int row = 0; row < rhs.rows(); row++)
    {
        for (int col = 0; col < rhs.cols(); coL++)
        {
            constraints.push_back(lessthan(lhs,rhs(row,col)));
        }
    }

    return constraints;
}

在Eigen类型类似于SparseMatrix-DenseVector产品之前,此方法一直有效。似乎结果表达式的类型为const Eigen::Product<Eigen::SparseMatrix<cvx::Scalar,int>,cvx::VectorX,0>,并且通过索引对其进行迭代非常慢。

可以通过首先在产品上调用eval()方法解决此问题,但这不是用户所期望的。

  1. 我的问题诊断正确吗?

  2. 我可以对lessthan()函数应用它吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)