Eigen中是否存在使用相对和绝对容差(numpy.allclose)比较矢量(矩阵)的函数?如果其中一个向量非常接近于零,则标准isApprox会失败。
答案 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;一些小数字。