2013-02-24 24 views

答えて

11

numpy.allcloseを実装している組み込み関数はありませんが、本当に必要な場合は簡単に書き込むことができます。しかし、私はむしろ基準値とisMuchSmallerThanの使用をお勧めしたい:

refはあなたの問題のための代表的非ゼロである
(a-b).isMuchSmallerThan(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(); 
} 
+0

isMuchSmallerThanは絶対比較に使用できます。つまり、(ab).isMuchSmallerThan(1.0、atol)はnp.allclose(a、 b、0.0、atol)ので、np.allcloseを模倣するために、次のようにしなければなりません:(ab).isMuchSmallerThan(1.0、atol)|| a.isApprox(b、rtol)。私は正しいですか? – DikobrAz

+4

isMuchSmallerThanとisApproxは、L2行列のノルムに基づいており、要素ごとの比較(無限ノルム)に基づいているわけではありません。 – ggael

0

私のために働いていなかったisApprox機能もあります。 私はちょうど(expect - res).norm()<いくつかの小さな番号を使用しています。

関連する問題