'Predict data using the ``centroids_`` of subclusters.
Avoid computation of the row norms of X.
Parameters
X : {array-like, sparse matrix}, shape (n_samples, n_features)
Input data.
Returns
labels : ndarray, shape(n_samples)
Labelled data.'

def predict(self, X):

    X = check_array(X, accept_sparse='csr')
    self._check_fit(X)
    reduced_distance = safe_sparse_dot(X, self.subcluster_centers_.T)
    reduced_distance *= (-2)
    reduced_distance += self._subcluster_norms
    return self.subcluster_labels_[np.argmin(reduced_distance, axis=1)]
