package com.walker.embedding.util;
|
|
public final class FeatureComparison {
|
private FeatureComparison() {}
|
|
public static final float ZERO_VALUE = 0.0F;
|
|
public static float cosineSim(float[] feature1, float[] feature2) {
|
float ret = ZERO_VALUE;
|
float mod1 = ZERO_VALUE;
|
float mod2 = ZERO_VALUE;
|
int length = feature1.length;
|
for (int i = 0; i < length; ++i) {
|
ret += feature1[i] * feature2[i];
|
mod1 += feature1[i] * feature1[i];
|
mod2 += feature2[i] * feature2[i];
|
}
|
// dot(x, y) / (np.sqrt(dot(x, x)) * np.sqrt(dot(y, y))))
|
return (float) (ret / Math.sqrt(mod1) / Math.sqrt(mod2));
|
}
|
|
public static float dot(float[] feature1, float[] feature2) {
|
float ret = ZERO_VALUE;
|
int length = feature1.length;
|
// dot(x, y)
|
for (int i = 0; i < length; ++i) {
|
ret += feature1[i] * feature2[i];
|
}
|
|
return ret;
|
}
|
}
|