Immaginate di avere una tabella che memorizza una serie di vettori sparsi. Un vettore sparse significa che memorizza solo i valori diversi da zero nella struttura dei dati. Potrei avere un vettore dimensionale da 1 milione, ma memorizzo solo i valori per le dimensioni che non sono zero. Quindi la dimensione è proporzionale al numero di voci diverse da zero, non alla dimensionalità del vettore.Prodotto con punti sparsi in SQL
definizione Tabella sarebbe qualcosa di simile a questo: vector_id: int dimensione: int valore: galleggiare
Ora, nel normale terreno di programmazione posso calcolare il prodotto interno o prodotto scalare di due vettori a O (| v1 | + | v2 |) tempo. Fondamentalmente l'algoritmo è quello di memorizzare i vettori sparse ordinate per dimensione e scorrere le dimensioni in ciascuna finché non si trovano collisioni tra le dimensioni e moltiplicare i valori della dimensione condivisa e continuare ad aggiungerle fino a raggiungere la fine di uno dei vettori .
Qual è il modo più veloce per eseguire questa operazione in SQL?
Così come è possibile indicizzare il tavolo? Di (vector_id, dimensione)? –
L'indicizzazione per (vector_id, dimensione) ha più senso, poiché è necessario definire un record univoco nella tabella. – dpmattingly
Questo è praticamente ciò che mi è venuto in mente - fino a quando qualcun altro posterà qualcosa di più veloce te lo darò io. Grazie! –