Eigen 中是否有一个函数可以使用相对容差和绝对容差(又名numpy.allclose )来比较向量(矩阵) ?如果向量之一非常接近零,则标准isApprox失败。
问问题
16106 次
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 回答