Skip to content

Commit

Permalink
Updates
Browse files Browse the repository at this point in the history
  • Loading branch information
jwcalder committed May 22, 2024
1 parent 4057eb6 commit 1a93a9c
Showing 1 changed file with 22 additions and 12 deletions.
34 changes: 22 additions & 12 deletions docs/weightmatrix.html
Original file line number Diff line number Diff line change
Expand Up @@ -403,26 +403,31 @@ <h1 id="weight-matrices">Weight Matrices</h1>
knn_ind = []
eps = 1e-15
for i in range(n):
A = u.get_nns_by_item(i, k, include_distances=True, search_k=-1)
knn_ind.append(A[0])
#Get extra neighbors, in case there are mistakes
A = u.get_nns_by_item(i, min(2*k,n), include_distances=True)
ind = np.array(A[0])
#knn_dist.append(A[1]) #These distances are floating point (32-bit) precision
#The code below computes them more accurately
if similarity == &#39;euclidean&#39;:
dist = np.linalg.norm(X[i,:] - X[A[0],:],axis=1)
dist = np.linalg.norm(X[i,:] - X[ind,:],axis=1)
elif similarity == &#39;angular&#39;:
vi = X[i,:]/np.maximum(np.linalg.norm(X[i,:]),eps)
vj = X[A[0],:]/np.maximum(np.linalg.norm(X[A[0],:],axis=1)[:,None],eps)
vj = X[ind,:]/np.maximum(np.linalg.norm(X[ind,:],axis=1)[:,None],eps)
dist = np.linalg.norm(vi-vj,axis=1)
elif similarity == &#39;manhattan&#39;:
dist = np.linalg.norm(X[i,:] - X[A[0],:],axis=1,ord=1)
dist = np.linalg.norm(X[i,:] - X[ind,:],axis=1,ord=1)
elif similarity == &#39;hamming&#39;:
dist = A[1] #hamming is integer-valued, so no need to compute in double precision
elif similarity == &#39;dot&#39;:
dist = np.sum(X[i,:]*X[A[0],:],axis=1)
dist = np.sum(X[i,:]*X[ind,:],axis=1)
else:
dist = A[1]

ind_sort = np.argsort(dist)[:k]
ind = ind[ind_sort]
dist = dist[ind_sort]
#print(np.max(np.absolute(dist - np.array(A[1]))))
knn_ind.append(ind)
knn_dist.append(dist)


Expand Down Expand Up @@ -1171,26 +1176,31 @@ <h2 id="returns">Returns</h2>
knn_ind = []
eps = 1e-15
for i in range(n):
A = u.get_nns_by_item(i, k, include_distances=True, search_k=-1)
knn_ind.append(A[0])
#Get extra neighbors, in case there are mistakes
A = u.get_nns_by_item(i, min(2*k,n), include_distances=True)
ind = np.array(A[0])
#knn_dist.append(A[1]) #These distances are floating point (32-bit) precision
#The code below computes them more accurately
if similarity == &#39;euclidean&#39;:
dist = np.linalg.norm(X[i,:] - X[A[0],:],axis=1)
dist = np.linalg.norm(X[i,:] - X[ind,:],axis=1)
elif similarity == &#39;angular&#39;:
vi = X[i,:]/np.maximum(np.linalg.norm(X[i,:]),eps)
vj = X[A[0],:]/np.maximum(np.linalg.norm(X[A[0],:],axis=1)[:,None],eps)
vj = X[ind,:]/np.maximum(np.linalg.norm(X[ind,:],axis=1)[:,None],eps)
dist = np.linalg.norm(vi-vj,axis=1)
elif similarity == &#39;manhattan&#39;:
dist = np.linalg.norm(X[i,:] - X[A[0],:],axis=1,ord=1)
dist = np.linalg.norm(X[i,:] - X[ind,:],axis=1,ord=1)
elif similarity == &#39;hamming&#39;:
dist = A[1] #hamming is integer-valued, so no need to compute in double precision
elif similarity == &#39;dot&#39;:
dist = np.sum(X[i,:]*X[A[0],:],axis=1)
dist = np.sum(X[i,:]*X[ind,:],axis=1)
else:
dist = A[1]

ind_sort = np.argsort(dist)[:k]
ind = ind[ind_sort]
dist = dist[ind_sort]
#print(np.max(np.absolute(dist - np.array(A[1]))))
knn_ind.append(ind)
knn_dist.append(dist)


Expand Down

0 comments on commit 1a93a9c

Please sign in to comment.