private void GetFingerprintSimilarity(IFingerprintCommand databaseSong, IFingerprintCommand querySong, SimilarityResult results) { double sum = 0; List <bool[]> fingerprintsDatabaseSong = databaseSong.Fingerprint() .Result .Select(fingerprint => fingerprint) .ToList(); List <bool[]> fingerprintsQuerySong = querySong.Fingerprint() .Result .Select(fingerprint => fingerprint) .ToList(); double max = double.MinValue; double min = double.MaxValue; int comparisonsCount = 0; for (int i = 0; i < fingerprintsDatabaseSong.Count; i++) { for (int j = 0; j < fingerprintsQuerySong.Count; j++) { double value = SimilarityUtility.CalculateJaccardSimilarity(fingerprintsDatabaseSong[i], fingerprintsQuerySong[j]); if (value > max) { max = value; } if (value < min) { min = value; } sum += value; comparisonsCount++; } } results.SumJaqSimilarityBetweenDatabaseAndQuerySong += sum; results.AverageJaqSimilarityBetweenDatabaseAndQuerySong += sum / comparisonsCount; if (max > results.MaxJaqSimilarityBetweenDatabaseAndQuerySong) { results.MaxJaqSimilarityBetweenDatabaseAndQuerySong = max; } if (min < results.MinJaqSimilarityBetweenDatabaseAndQuerySong) { results.MinJaqSimilarityBetweenDatabaseAndQuerySong = min; } results.NumberOfAnalizedFingerprints = comparisonsCount; }
private void GetFingerprintSimilarity(IFingerprintCommand databaseSong, IFingerprintCommand querySong, SimilarityResult results) { double sum = 0; List<bool[]> fingerprintsDatabaseSong = databaseSong.Fingerprint() .Result .Select(fingerprint => fingerprint) .ToList(); List<bool[]> fingerprintsQuerySong = querySong.Fingerprint() .Result .Select(fingerprint => fingerprint) .ToList(); double max = double.MinValue; double min = double.MaxValue; int comparisonsCount = 0; for (int i = 0; i < fingerprintsDatabaseSong.Count; i++) { for (int j = 0; j < fingerprintsQuerySong.Count; j++) { double value = SimilarityUtility.CalculateJaccardSimilarity(fingerprintsDatabaseSong[i], fingerprintsQuerySong[j]); if (value > max) { max = value; } if (value < min) { min = value; } sum += value; comparisonsCount++; } } results.SumJaqSimilarityBetweenDatabaseAndQuerySong += sum; results.AverageJaqSimilarityBetweenDatabaseAndQuerySong += sum / comparisonsCount; if (max > results.MaxJaqSimilarityBetweenDatabaseAndQuerySong) { results.MaxJaqSimilarityBetweenDatabaseAndQuerySong = max; } if (min < results.MinJaqSimilarityBetweenDatabaseAndQuerySong) { results.MinJaqSimilarityBetweenDatabaseAndQuerySong = min; } results.NumberOfAnalizedFingerprints = comparisonsCount; }