internal static double SumSquaredDiffs(BoolArrayVector x, SparseFloatVector y) { double sum = 0; int xlen = x.Length; int ylen = y.indices.Length; int i = 0; int j = 0; while (i < xlen && j < ylen){ if (i == y.indices[j]){ double d = y.values[j++]; if (x.values[i++]){ d -= 1; } sum += d*d; } else if (i > y.indices[j]){ sum += y.values[j]*y.values[j]; ++j; } else{ if (x.values[i]){ sum += 1; } ++i; } } while (i < xlen){ if (x.values[i]){ sum += 1; } ++i; } while (j < ylen){ sum += y.values[j]*y.values[j]; ++j; } return sum; }
internal static double Dot(BoolArrayVector x, SparseFloatVector y) { double sum = 0; int xlen = x.Length; int ylen = y.indices.Length; int i = 0; int j = 0; while (i < xlen && j < ylen){ if (i == y.indices[j]){ if (x.values[i]){ sum += y.values[j]; } i++; j++; } else{ if (i > y.indices[j]){ ++j; } else{ ++i; } } } return sum; }
internal static double SumSquaredDiffs(BoolArrayVector x, BoolArrayVector y) { double sum = 0; for (int i = 0; i < x.Length; i++){ if (x.values[i] != y.values[i]){ sum ++; } } return sum; }
internal static double SumSquaredDiffs(BoolArrayVector x, FloatArrayVector y) { double sum = 0; for (int i = 0; i < x.Length; i++){ double d = y.values[i]; if (x.values[i]){ d -= 1; } sum += d*d; } return sum; }
internal static double Dot(BoolArrayVector x, FloatArrayVector y) { double sum = 0; for (int i = 0; i < x.Length; i++){ if (x.values[i]){ sum += y.values[i]; } } return sum; }