Spärliches Skalarprodukt in SQL

8

Stellen Sie sich vor, ich habe eine Tabelle, in der eine Reihe von Vektoren gespeichert ist. Ein Sparse-Vektor bedeutet, dass er nur die Nicht-Null-Werte explizit in der Datenstruktur speichert. Ich könnte einen 1 Million dimensionalen Vektor haben, aber ich speichere nur die Werte für die Dimensionen, die nicht Null sind. Die Größe ist also proportional zur Anzahl der Nicht-Null-Einträge und nicht zur Dimensionalität des Vektors.

Die Tabellendefinition würde ungefähr so ​​aussehen: vector_id: int Dimension: int Wert: float

Nun kann ich im normalen Programmierland das innere Produkt oder das Skalarprodukt zweier Vektoren in der Zeit O (| v1 | + | v2 |) berechnen. Grundsätzlich besteht der Algorithmus darin, die dünn besetzten Vektoren nach Dimension sortiert zu speichern und die Dimensionen in jedem zu durchlaufen, bis Sie Kollisionen zwischen Dimensionen finden und die Werte der geteilten Dimension multiplizieren und diese bis zum Ende eines der Vektoren addieren .

Was ist der schnellste Weg, um dies in SQL zu entfernen?

    
Chris Harris 29.06.2009, 20:47
quelle

1 Antwort

5

Sie sollten diesen Algorithmus in einer Abfrage replizieren können:

%Vor%     
dpmattingly 29.06.2009, 20:52
quelle