方法1
我们可以使用
Cython-powered kd-tree快速的最近邻居查询,这在内存和性能上都非常有效-
In [276]: from scipy.spatial import cKDTreeIn [277]: matrix[cKDTree(matrix).query(search_vec, k=1)[1]]Out[277]: array([2, 2])
方法#2
与
SciPy'scdist-
In [286]: from scipy.spatial.distance import cdistIn [287]: matrix[cdist(matrix, np.atleast_2d(search_vec)).argmin()]Out[287]: array([2, 2])
方法#3
与
Scikit-learn's最近的邻居-
from sklearn.neighbors import NearestNeighborsnbrs = NearestNeighbors(n_neighbors=1).fit(matrix)closest_vec = matrix[nbrs.kneighbors(np.atleast_2d(search_vec))[1][0,0]]
方法#4
随着
Scikit-learn'skdtree -
from sklearn.neighbors import KDTreekdt = KDTree(matrix, metric='euclidean')cv = matrix[kdt.query(np.atleast_2d(search_vec), k=1, return_distance=False)[0,0]]
方法5
从
eucl_dist软件包(免责声明:我是它的作者)中,按照
wiki contents,我们可以利用
matrix-multiplication-
M = matrix.dot(search_vec)d = np.einsum('ij,ij->i',matrix,matrix) + np.inner(search_vec,search_vec) -2*Mclosest_vec = matrix[d.argmin()]


