BitVecCosineSimilarity
Description
Calculate cosine similarity between two bitvectors. Treats bitvectors as binary vectors and computes cosine of angle between them.
Parameters
| Name | Direction | Description |
|---|---|---|
bv1 |
in | First bitvector |
bv2 |
in | Second bitvector |
Usage example (from documentation)
double similarity = BitVecCosineSimilarity(&bv1, &bv2);Success
Returns the cosine similarity coefficient in [0.0, 1.0]. Neither operand is modified.
Failure
Returns 0.0 when either operand has no set bits (degenerate magnitude); the caller cannot distinguish that from a true zero coefficient.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
BitVec.c:1450:
}
double BitVecCosineSimilarity(BitVec *bv1, BitVec *bv2) {
ValidateBitVec(bv1);
ValidateBitVec(bv2); DefaultAllocator alloc = DefaultAllocatorInit();
WriteFmt("Testing BitVecCosineSimilarity basic functionality\n");
BitVec bv1 = BitVecInit(ALLOCATOR_OF(&alloc)); BitVecPush(&bv2, true);
double similarity = BitVecCosineSimilarity(&bv1, &bv2);
result = result && (F64Abs(similarity - 1.0) < 0.001); BitVecPush(&bv2, true);
similarity = BitVecCosineSimilarity(&bv1, &bv2);
result = result && (F64Abs(similarity - 0.0) < 0.001); DefaultAllocator alloc = DefaultAllocatorInit();
WriteFmt("Testing BitVecCosineSimilarity edge cases\n");
BitVec bv1 = BitVecInit(ALLOCATOR_OF(&alloc)); 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); DefaultAllocator alloc = DefaultAllocatorInit();
WriteFmt("Testing BitVecCosineSimilarity(NULL, bv2) - should fatal\n");
BitVec bv2 = BitVecInit(ALLOCATOR_OF(&alloc));
BitVecPush(&bv2, true); BitVec bv2 = BitVecInit(ALLOCATOR_OF(&alloc));
BitVecPush(&bv2, true);
BitVecCosineSimilarity(NULL, &bv2);
BitVecDeinit(&bv2);
DefaultAllocatorDeinit(&alloc); DefaultAllocator alloc = DefaultAllocatorInit();
WriteFmt("Testing BitVecCosineSimilarity(bv1, NULL) - should fatal\n");
BitVec bv1 = BitVecInit(ALLOCATOR_OF(&alloc));
BitVecPush(&bv1, true); BitVec bv1 = BitVecInit(ALLOCATOR_OF(&alloc));
BitVecPush(&bv1, true);
BitVecCosineSimilarity(&bv1, NULL);
BitVecDeinit(&bv1);
DefaultAllocatorDeinit(&alloc);
Last updated on