private double hammingDistanceNumberVector(NumberVector o1,NumberVector o2){
  final int d1=o1.getDimensionality(), d2=o2.getDimensionality();
  int differences=0;
  int d=0;
  for (; d < d1 && d < d2; d++) {
    double v1=o1.doubleValue(d), v2=o2.doubleValue(d);
    if (v1 != v1 || v2 != v2) {
      continue;
    }
    if (v1 != v2) {
      ++differences;
    }
  }
  for (; d < d1; d++) {
    double v1=o1.doubleValue(d);
    if (v1 != 0. && v1 == v1) {
      ++differences;
    }
  }
  for (; d < d2; d++) {
    double v2=o2.doubleValue(d);
    if (v2 != 0. && v2 == v2) {
      ++differences;
    }
  }
  return differences;
}

private double hammingDistanceNumberVector ( NumberVector o1 , NumberVector o2 ) { final int d1 = o1 . getDimensionality ( ) , d2 = o2 . getDimensionality ( ) ; int differences = 0 ; int d = 0 ; for ( ; d < d1 && d < d2 ; d ++ ) { double v1 = o1 . doubleValue ( d ) , v2 = o2 . doubleValue ( d ) ; if ( v1 != v1 || v2 != v2 ) { continue ; } if ( v1 != v2 ) { ++ differences ; } } for ( ; d < d1 ; d ++ ) { double v1 = o1 . doubleValue ( d ) ; if ( v1 != 0. && v1 == v1 ) { ++ differences ; } } for ( ; d < d2 ; d ++ ) { double v2 = o2 . doubleValue ( d ) ; if ( v2 != 0. && v2 == v2 ) { ++ differences ; } } return differences ; }
version for number vectors .
