如何在Eigen中近似比较向量?

时间:2013-02-24 11:39:23

标签: c++ linear-algebra eigen

Eigen中是否存在使用相对和绝对容差(numpy.allclose)比较矢量(矩阵)的函数?如果其中一个向量非常接近于零,则标准isApprox会失败。

2 个答案:

答案 0 :(得分:12)

没有内置函数实现numpy.allclose,但如果你真正需要的话,你可以轻松自己编写一个。但是,我建议使用isMuchSmallerThan作为参考值:

(a-b).isMuchSmallerThan(ref)

其中ref是您的问题的代表非零。

编辑:这里的参考是allclose的可能实现:

template<typename DerivedA, typename DerivedB>
bool allclose(const Eigen::DenseBase<DerivedA>& a,
              const Eigen::DenseBase<DerivedB>& b,
              const typename DerivedA::RealScalar& rtol
                  = Eigen::NumTraits<typename DerivedA::RealScalar>::dummy_precision(),
              const typename DerivedA::RealScalar& atol
                  = Eigen::NumTraits<typename DerivedA::RealScalar>::epsilon())
{
  return ((a.derived() - b.derived()).array().abs()
          <= (atol + rtol * b.derived().array().abs())).all();
}

答案 1 :(得分:1)

还有isApprox功能对我不起作用。 我只是使用(expect - res).norm()&lt;一些小数字。