Представьте, что у меня есть таблица, в которой хранится серия разреженных векторов. Разреженный вектор означает, что он явно хранит только ненулевые значения в структуре данных. Я мог бы иметь вектор размером 1 миллион, но я храню только значения для измерений, отличных от нуля. Таким образом, размер пропорционален количеству ненулевых элементов, а не размерности вектора.
Определение таблицы будет выглядеть примерно так:
vector_id: int
размерность: int
значение: float
Теперь в обычном программировании я могу вычислить внутреннее произведение или произведение точек двух векторов за O (| v1 | + | v2 |) время. По сути, алгоритм состоит в том, чтобы хранить разреженные векторы, отсортированные по измерениям, и выполнять итерацию по измерениям в каждом из них, пока не найдете коллизии между измерениями, не умножите значения общего измерения и не добавляйте их до тех пор, пока не достигнете конца одного из векторов .
Какой самый быстрый способ реализовать это в SQL?