Я хочу найти более быстрый способ получения индекса ближайшего элемента в массиве формы (k,l)
для каждого элемента в другом массиве формы (n,l)
, я нашел 2 решения, но я думаю, что производительность можно улучшить.
вот пример
import numpy as np
import numpy.matlib as ml
frames = np.random.random([1000,2])
codeBook = np.random.random([8,2])
I
dist = np.zeros([frames .shape[0],codeBook.shape[0]])
for i in range(8):
difference = frames - ml.repmat(codeBook[i,:],frames.shape[0],1)
dist[:,i] = np.sqrt(np.sum(difference**2,1))
idx = np.argmin(dist,axis=1)
II
diffToCB = frames - np.rot90(ml.repmat(codeBook,frames.shape[0],1).reshape(-1,8,2),axes=(1,0))
idx = np.argmin(np.sqrt(np.einsum('ijk,ijk->ij', diffToCB, diffToCB)) , axis=0)