2013-02-24 4 views

답변

11

numpy.allclose를 구현하는 기본 제공 함수는 없지만 필요한 경우 실제로 쉽게 작성할 수 있습니다. 그러나, 나는 오히려 기준값으로 isMuchSmallerThan의 사용을 건의 할 것입니다 : 심판 문제에 대한 대표적인 비 제로

(a-b).isMuchSmallerThan(ref) 

합니다.

편집 :

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 기능이 있습니다 : 여기 참조 allclose의 가능한 구현입니다. 난 단지 (기대 - 입술) .norm() < 몇 가지 작은 번호입니다.

관련 문제