shikeying
2024-01-11 3b67e947e36133e2a40eb2737b15ea375e157ea0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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;
  }
}