Using random projections for locally sensitive hashing
$r \cdot v$ can be negative even if all elements of $v$ are positive: consider, e.g., $r = (2,-3)$ and $v=(1,1)$.  Then $r \cdot v = -1$.

Also, using random projections is not the same as defining a hash to be 1 if the dot-product is $\ge 0$ and 0 if it is $&lt;0$.  You can still use a random projection without using that particular hash function.  I haven't looked at the sparselsh code, but it's also possible that it could be using a random projection but without using that specific hash function.