16

Eigen 中是否有一个函数可以使用相对容差和绝对容差(又名numpy.allclose )来比较向量(矩阵) ?如果向量之一非常接近零,则标准isApprox失败。

4

2 回答 2

17

没有实现 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();
}
于 2013-02-24T13:20:27.900 回答
3

还有一个 isApprox 函数对我不起作用。我只是在使用 (expect - res).norm() < 一些小数字。

于 2017-09-01T21:22:35.667 回答