, . N, pt A. , B pts , .
, einsum matrix-multiplication, this post, pt A , , -
for pt in A:
d = np.einsum('ij,ij->i',B,B) + pt.dot(pt) - 2*B.dot(pt)
, , A np.einsum('ij,ij->i',B,B), :
min_idx = np.empty(N, dtype=int)
min_dist = np.empty(N)
Bsqsum = np.einsum('ij,ij->i',B,B)
for i,pt in enumerate(A):
d = Bsqsum + pt.dot(pt) - 2*B.dot(pt)
min_idx[i] = d.argmin()
min_dist[i] = d[min_idx[i]]
min_dist = np.sqrt(min_dist)
-
np.einsum('ij,ij->i',B,B)[:,None] + np.einsum('ij,ij->i',A,A) - 2*B.dot(A.T)
, , A, 3D, :
chunk_size= 100
A.shape = (A.shape[0]//chunk_size, chunk_size,-1)
min_idx = np.empty((N//chunk_size, chunk_size), dtype=int)
min_dist = np.empty((N//chunk_size, chunk_size))
Bsqsum = np.einsum('ij,ij->i',B,B)[:,None]
r = np.arange(chunk_size)
for i,chnk in enumerate(A):
d = Bsqsum + np.einsum('ij,ij->i',chnk,chnk) - 2*B.dot(chnk.T)
idx = d.argmin(0)
min_idx[i] = idx
min_dist[i] = d[idx,r]
min_dist = np.sqrt(min_dist)
min_idx.shape = (N,)
min_dist.shape = (N,)
A.shape = (N,-1)