public void Test_KC_FloatVector_CosineSim() { float[] vec1 = { 31.5202609F, 40.01996581F, 49.89208719F, 73.88465236F, 61.65325936F }; float[] vec2 = { 60.74887955F, 69.51020825F, 21.68914134F, 24.71560093F, 86.70878694F }; double cosignsim = 0.8263762988702843; var fv1 = new KC_FloatVector(vec1); var fv2 = new KC_FloatVector(vec2); // Test combinations without normalized vectors Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(vec2))); Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(vec1))); Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(fv2))); Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(fv1))); // Normalize first vector and test combos fv1.Normalize(); Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(vec2))); Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(vec1))); Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(fv2))); Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(fv1))); // Normalize second vector and test combos fv2.Normalize(); Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(vec2))); Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(vec1))); Assert.True(EqualWithinTolerance(cosignsim, fv1.CosineSim(fv2))); Assert.True(EqualWithinTolerance(cosignsim, fv2.CosineSim(fv1))); }
public void Test_KC_FloatVector_Normalize() { float[] floats = { 0.1F, 0.2F, 0.3F, 0.4F, 0.5F }; KC_FloatVector fv = new KC_FloatVector(floats); Assert.False(fv.IsNormalized); Assert.Null(fv.NormalizedVector); fv.Normalize(); Assert.Equal(floats, fv.FloatVector); float[] normfloats = { 0.13483997249264842F, 0.26967994498529685F, 0.40451991747794525F, 0.5393598899705937F, 0.674199862463242F }; for (int i = 0; i < floats.Length; i++) { Assert.True(EqualWithinTolerance(normfloats[i], fv.NormalizedVector[i])); } float[] normalized = new float [fv.NormalizedVector.Count]; fv.NormalizedVector.CopyTo(normalized, 0); double normlen = KC_FloatVector.Length(normalized); Assert.True(EqualWithinTolerance(1.0, normlen)); Assert.True(fv.IsNormalized); fv.FloatVector = new float[] { 9.0F, 8.0F, 7.0F }; Assert.False(fv.IsNormalized); Assert.Null(fv.NormalizedVector); }