Cosine Similarity

Functional Interface

torchmetrics.functional.pairwise_cosine_similarity(x, y=None, reduction=None, zero_diagonal=None)[source]

Calculate pairwise cosine similarity.

scos(x,y)=<x,y>∣∣x∣∣⋅∣∣y∣∣=∑d=1Dxd⋅yd∑d=1Dxi2⋅∑d=1Dyi2s_{cos}(x,y) = \frac{<x,y>}{||x|| \cdot ||y||} = \frac{\sum_{d=1}^D x_d \cdot y_d }{\sqrt{\sum_{d=1}^D x_i^2} \cdot \sqrt{\sum_{d=1}^D y_i^2}}

If both xx and yy are passed in, the calculation will be performed pairwise between the rows of xx and yy. If only xx is passed in, the calculation will be performed between the rows of xx.

Parameters:
  • x (Tensor) – Tensor with shape [N, d]

  • y (Optional[Tensor]) – Tensor with shape [M, d], optional

  • reduction (Optional[Literal['mean', 'sum', 'none', None]]) – reduction to apply along the last dimension. Choose between ‘mean’, ‘sum’ (applied along column dimension) or ‘none’, None for no reduction

  • zero_diagonal (Optional[bool]) – if the diagonal of the distance matrix should be set to 0. If only xx is given this defaults to True else if yy is also given it defaults to False

Return type:

Tensor

Returns:

A [N,N] matrix of distances if only x is given, else a [N,M] matrix

Example

>>> import torch
>>> from torchmetrics.functional.pairwise import pairwise_cosine_similarity
>>> x = torch.tensor([[2, 3], [3, 5], [5, 8]], dtype=torch.float32)
>>> y = torch.tensor([[1, 0], [2, 1]], dtype=torch.float32)
>>> pairwise_cosine_similarity(x, y)
tensor([[0.5547, 0.8682],
        [0.5145, 0.8437],
        [0.5300, 0.8533]])
>>> pairwise_cosine_similarity(x)
tensor([[0.0000, 0.9989, 0.9996],
        [0.9989, 0.0000, 0.9998],
        [0.9996, 0.9998, 0.0000]])

Was this page helpful?

What went wrong?

↑↓ Navigate↵ Open⌘↵ New tabesc Close