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— списки списков Pythonfloat,k—int. - Вернуть нужно только матрицу индексов
I(безD) — список списков или numpy-массив. - Функцию вызывать не нужно — это делается автоматически.
Пример
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
