High severity beginner · Fix: 2-5 min

ValueError

builtins.ValueError

What this error means
Cosine similarity calculation returns NaN due to zero vectors or invalid input embeddings causing division by zero.

Stack trace

traceback
ValueError: cosine similarity resulted in NaN due to zero norm vector
  File "embedding_utils.py", line 42, in compute_cosine_similarity
    similarity = np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))
  File "embedding_utils.py", line 58, in main
    sim = compute_cosine_similarity(embedding1, embedding2)  # triggers error
QUICK FIX
Add a norm check before cosine similarity calculation and return 0 similarity if any vector norm is zero to avoid NaN.

Why it happens

Cosine similarity divides the dot product of two vectors by the product of their norms. If either vector is a zero vector (all elements zero), its norm is zero, causing division by zero and resulting in NaN. This often happens when embeddings are empty, uninitialized, or contain invalid values.

Detection

Check for zero vectors by verifying if the norm of any embedding vector is zero before computing cosine similarity, and log or raise a clear error if detected.

Causes & fixes

1

One or both embedding vectors are zero vectors with all elements zero

✓ Fix

Add a check to ensure embedding vectors have non-zero norm before computing cosine similarity; handle zero vectors by skipping or assigning similarity=0.

2

Embedding vectors contain NaN or infinite values due to upstream errors or corrupted data

✓ Fix

Validate embeddings for NaN or infinite values using numpy functions like np.isnan() or np.isfinite() and clean or regenerate embeddings before similarity calculation.

3

Incorrect embedding extraction resulting in empty or zero-length vectors

✓ Fix

Verify embedding extraction logic to ensure vectors are correctly generated and have expected dimensionality and values.

Code: broken vs fixed

Broken - triggers the error
python
import numpy as np

def compute_cosine_similarity(vec1, vec2):
    # This line causes NaN if vec1 or vec2 is zero vector
    return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))

embedding1 = np.array([0, 0, 0])
embedding2 = np.array([0.1, 0.2, 0.3])
similarity = compute_cosine_similarity(embedding1, embedding2)  # triggers ValueError or NaN
print(f"Similarity: {similarity}")
Fixed - works correctly
python
import numpy as np

def compute_cosine_similarity(vec1, vec2):
    norm1 = np.linalg.norm(vec1)
    norm2 = np.linalg.norm(vec2)
    if norm1 == 0 or norm2 == 0:
        return 0.0  # Avoid division by zero, define similarity as 0
    return np.dot(vec1, vec2) / (norm1 * norm2)

embedding1 = np.array([0, 0, 0])
embedding2 = np.array([0.1, 0.2, 0.3])
similarity = compute_cosine_similarity(embedding1, embedding2)  # fixed to avoid NaN
print(f"Similarity: {similarity}")
Added norm checks to return 0 similarity when either vector norm is zero, preventing division by zero and NaN results.

Workaround

Wrap cosine similarity calculation in try/except to catch ValueError or check for NaN results and fallback to zero similarity or skip calculation.

Prevention

Validate all embedding vectors for zero norm, NaN, or infinite values immediately after generation and before similarity computations to ensure data integrity.

Python 3.9+ · numpy >=1.20.0 · tested on 1.24.x
Verified 2026-04
Verify ↗

Community Notes

No notes yetBe the first to share a version-specific fix or tip.