def kmean_distance2(x, C):
"""Compute squared euclidian distance to the nearest cluster centre
Parameters
----------
x : ndarray
(n, d) array of n d-dimensional points
C : ndarray
(k, d) array of k cluster centres
Returns
-------
d2_x : ndarray
(n,) length array of distances from each x to the nearest centre
"""
# To save memory we partition the computation
nsplits = max(1, int(x.shape[0]/distance_partition_size))
splits = np.array_split(x, nsplits)
d2_x = np.empty(x.shape[0])
idx = 0
for x_i in splits:
n_i = x_i.shape[0]
D2_x = scipy.spatial.distance.cdist(x_i, C, metric='sqeuclidean')
d2_x[idx:idx + n_i] = np.amin(D2_x, axis=1)
idx += n_i
return d2_x
评论列表
文章目录