FAISS IndexFlatL2: поиск ближайших векторов на Python

Напишите функцию построения индекса и поиска ближайших соседей. В упражнении библиотеку заменяет учебный mock с указанным API: можно сосредоточиться на форме данных и возвращаемых индексах.

Напишите код и проверьте решение. Продолжить тему можно в курсе Vector DB & RAG Developer.

Первый индекс FAISS: IndexFlatL2 и требования к данным

Задание

Напишите функцию find_nearest(base_vectors, query_vectors, k), которая создаёт индекс IndexFlatL2, добавляет в него базовые векторы и возвращает матрицу индексов k ближайших соседей для каждого вектора из query_vectors.

Теория

FAISS работает только с массивами float32 в C-contiguous порядке памяти — нарушение любого из этих условий даст ошибку. Индекс IndexFlatL2 создаётся с одним параметром — размерностью d. Метод search возвращает два массива: расстояния и индексы.

Пример

base = [[1.0, 0.0], [0.0, 1.0], [2.0, 2.0]]
query = [[1.0, 0.1]]
k = 2

result = find_nearest(base, query, k)
# result == [[0, 1]]
# Вектор [1.0, 0.1] ближе всего к [1.0, 0.0] (индекс 0),
# затем к [0.0, 1.0] (индекс 1)

Примечание

  • Важно: библиотека faiss в этом задании — имитация (mock). Она проверяет корректность вызовов API, но считает настоящие расстояния.
  • Из faiss замокировано: IndexFlatL2
  • Аргументы: base_vectors и query_vectors — списки списков Python float, k — int.
  • Вернуть нужно только матрицу индексов I (без D) — список списков или numpy-массив.
  • Функцию вызывать не нужно — это делается автоматически.

Пример

РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи