# torch_geometric.nn.pool.knn

knn(x: Tensor, y: Tensor, k: int, batch_x: = None, batch_y: = None, cosine: bool = False, num_workers: int = 1, batch_size: = None) [source]

Finds for each element in y the k nearest points in x.

import torch
from torch_geometric.nn import knn

x = torch.Tensor([[-1, -1], [-1, 1], [1, -1], [1, 1]])
batch_x = torch.tensor([0, 0, 0, 0])
y = torch.Tensor([[-1, 0], [1, 0]])
batch_y = torch.tensor([0, 0])
assign_index = knn(x, y, 2, batch_x, batch_y)

Parameters
• x (torch.Tensor) – Node feature matrix $$\mathbf{X} \in \mathbb{R}^{N \times F}$$.

• y (torch.Tensor) – Node feature matrix $$\mathbf{X} \in \mathbb{R}^{M \times F}$$.

• k (int) – The number of neighbors.

• batch_x (torch.Tensor, optional) – Batch vector $$\mathbf{b} \in {\{ 0, \ldots, B-1\}}^N$$, which assigns each node to a specific example. (default: None)

• batch_y (torch.Tensor, optional) – Batch vector $$\mathbf{b} \in {\{ 0, \ldots, B-1\}}^M$$, which assigns each node to a specific example. (default: None)

• cosine (bool, optional) – If True, will use the cosine distance instead of euclidean distance to find nearest neighbors. (default: False)

• num_workers (int, optional) – Number of workers to use for computation. Has no effect in case batch_x or batch_y is not None, or the input lies on the GPU. (default: 1)

• batch_size (int, optional) – The number of examples $$B$$. Automatically calculated if not given. (default: None)

Return type

torch.Tensor