Spaces:
Running
Running
| import faiss | |
| import numpy as np | |
| def indices_distances_gen(embeddings: np.ndarray, radius: float, index: faiss.Index): | |
| """ | |
| Generator that yields indices and distances of neighbors within a given radius for each embedding. | |
| :param embeddings: 2-d Numpy array where each row is an embedding to search neighbors for. | |
| :param radius: Similarity radius to search within. | |
| :param index: FAISS index for similarity search. | |
| """ | |
| embeddings_copy = embeddings.copy().astype(np.float32) | |
| faiss.normalize_L2(embeddings_copy) | |
| lims, D, I = index.range_search(embeddings_copy, radius) | |
| # Iterate over lims and get indices per embedding | |
| for i in range(len(lims) - 1): | |
| start = lims[i] | |
| end = lims[i + 1] | |
| indices_ = I[start:end] | |
| distances_ = D[start:end] | |
| yield indices_, distances_ |