Updated SparsevecInnerProduct [skip ci]

This commit is contained in:
Andrew Kane
2026-03-17 14:31:58 -07:00
parent 17916cad00
commit 434ef7a5ab

View File

@@ -895,28 +895,24 @@ SparsevecInnerProduct(SparseVector * a, SparseVector * b)
float *ax = SPARSEVEC_VALUES(a);
float *bx = SPARSEVEC_VALUES(b);
float distance = 0.0;
int bpos = 0;
int i = 0;
int j = 0;
for (int i = 0; i < a->nnz; i++)
while (i < a->nnz && j < b->nnz)
{
int ai = a->indices[i];
for (int j = bpos; j < b->nnz; j++)
{
int bi = b->indices[j];
/* Only update when the same index */
if (ai == bi)
{
distance += ax[i] * bx[j];
/* Update start for next iteration */
if (ai >= bi)
bpos = j + 1;
/* Found or passed it */
if (bi >= ai)
break;
i++;
j++;
}
else if (ai < bi)
i++;
else
j++;
}
return distance;