针对不同数值公差的不同平等[DenseVector]类型
我已经为DenseVectors编写了一个scalactic相等提供程序,它使用breeze closeTo方法来检查向量中的每个double是否足够接近。针对不同数值公差的不同平等[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
}
}
有什么办法,当我用在我的测试这种平等控制Batman蝙蝠侠的亲密程度?有时候我想在测试中“应该是平等的”,意味着平等到小数点后两位,而其他时候我想要一个更严格的要求。
回答:
是的,您可以控制接近度,因为closeTo有第三个参数,称为公差,定义在Implicits。
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)
以上是 针对不同数值公差的不同平等[DenseVector]类型 的全部内容, 来源链接: utcz.com/qa/263258.html