BitVecCosineSimilarity

Table of Contents

BitVecCosineSimilarity

Description

Calculate cosine similarity between two bitvectors. Treats bitvectors as binary vectors and computes cosine of angle between them.

Parameters

NameDirectionDescription
bv1inFirst bitvector
bv2inSecond bitvector

Usage example (from documentation)

  double similarity = BitVecCosineSimilarity(&bv1, &bv2);

Usage example (Cross-references)

    }
    
    double BitVecCosineSimilarity(BitVec *bv1, BitVec *bv2) {
    ValidateBitVec(bv1);
    ValidateBitVec(bv2);
    // Test BitVecCosineSimilarity basic functionality
    bool test_bitvec_cosine_similarity_basic(void) {
    printf("Testing BitVecCosineSimilarity basic functionality\n");
    
    BitVec bv1    = BitVecInit();
    BitVecPush(&bv2, true);
    
    double similarity = BitVecCosineSimilarity(&bv1, &bv2);
    result            = result && (fabs(similarity - 1.0) < 0.001);
    BitVecPush(&bv2, true);
    
    similarity = BitVecCosineSimilarity(&bv1, &bv2);
    result     = result && (fabs(similarity - 0.0) < 0.001);
    // Test BitVecCosineSimilarity edge cases
    bool test_bitvec_cosine_similarity_edge_cases(void) {
    printf("Testing BitVecCosineSimilarity edge cases\n");
    
    BitVec bv1    = BitVecInit();
    BitVecPush(&bv2, false);
    
    double similarity = BitVecCosineSimilarity(&bv1, &bv2);
    result            = result && (similarity == 0.0);
    BitVecPush(&bv2, false);
    
    similarity = BitVecCosineSimilarity(&bv1, &bv2);
    result     = result && (similarity == 0.0);
    u64    hamming     = BitVecHammingDistance(&bv1, &bv2);
    double jaccard     = BitVecJaccardSimilarity(&bv1, &bv2);
    double cosine      = BitVecCosineSimilarity(&bv1, &bv2);
    u64    dot_prod    = BitVecDotProduct(&bv1, &bv2);
    double correlation = BitVecCorrelation(&bv1, &bv2);
    
    bool test_bitvec_cosine_similarity_null_bv1(void) {
    printf("Testing BitVecCosineSimilarity(NULL, bv2) - should fatal\n");
    BitVec bv2 = BitVecInit();
    BitVecPush(&bv2, true);
    BitVec bv2 = BitVecInit();
    BitVecPush(&bv2, true);
    BitVecCosineSimilarity(NULL, &bv2);
    BitVecDeinit(&bv2);
    return true;
    
    bool test_bitvec_cosine_similarity_null_bv2(void) {
    printf("Testing BitVecCosineSimilarity(bv1, NULL) - should fatal\n");
    BitVec bv1 = BitVecInit();
    BitVecPush(&bv1, true);
    BitVec bv1 = BitVecInit();
    BitVecPush(&bv1, true);
    BitVecCosineSimilarity(&bv1, NULL);
    BitVecDeinit(&bv1);
    return true;

Share :

Related Posts

BitVecJaccardSimilarity

BitVecJaccardSimilarity Description Calculate Jaccard similarity between two bitvectors. Jaccard similarity = |intersection| / |union|

Read More

ALIGN_UP

ALIGN_UP Description Aligns the given value up to the nearest multiple of alignment.

Read More

BitVecRemoveLast

BitVecRemoveLast Description Remove the last occurrence of a specific bit value. Returns true if a bit was found and removed, false otherwise.

Read More