2017-09-27 7 views
0

breeze closeTo 메서드를 사용하여 벡터의 각 double이 충분히 가까운 지 확인하는 DenseVectors에 대한 스칼라 텍 균등 공급자를 작성했습니다.다른 수치 공차에 대한 서로 다른 등가 [DenseVector] 유형

implicit val vectorEquality: Equality[DenseVector[Double]] = new Equality[DenseVector[Double]] { 
    def areEqual(a: DenseVector[Double], b: Any): Boolean = { 
     b match { 
     case b: DenseVector[Double] => (a.valuesIterator zip b.valuesIterator).forall(p => 
      closeTo(p._1, p._2)) 
     case _ => false 
     } 
    } 

테스트에서이 동등성을 사용할 때 closeTo의 근접성을 제어 할 수있는 방법이 있습니까? 때로는 테스트에서 소수점 이하 2 자리의 평등을 의미하는 "평등해야 함"을 원하고 다른 경우에는 좀 더 엄격한 요구 사항을 원합니다.

답변

0

예. closeTo에는 Implicits에 정의 된 tolerance라는 세 번째 매개 변수가 있으므로 인접성을 제어 할 수 있습니다.

class RichDouble(x: Double) { 
    def closeTo(y: Double, tol: Double=1E-5) = { 
     (math.abs(x - y)/(math.abs(x) + math.abs(y) + 1e-10) < tol); 
    } 
    def isDangerous = x.isNaN || x.isInfinite 
} 

Chi Squared distribution

def paramsClose(p: Double, b: Double) = breeze.numerics.closeTo(p, b, 5E-2) 
위한 시험에서 발견 될 수있다