16

numpy.allcloseとも呼ばれる相対許容誤差と絶対許容誤差の両方を使用してベクトル (行列) を比較するEigenの機能はありますか? ベクトルの 1 つがゼロに非常に近い場合、標準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 に答える