Dik*_*rAz 11 c++ linear-algebra eigen
在Eigen中是否存在使用相对和绝对容差(numpy.allclose)比较矢量(矩阵)的函数?如果其中一个向量非常接近零,则标准isApprox失败.
gga*_*ael 12
没有内置函数实现numpy.allclose,但如果你真正需要的话,你可以自己轻松编写一个.但是,我宁愿建议使用带参考值的isMuchSmallerThan:
(a-b).isMuchSmallerThan(ref)
Run Code Online (Sandbox Code Playgroud)
其中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();
}
Run Code Online (Sandbox Code Playgroud)