Source code for scilpy.tractanalysis.distance_to_centroid

# -*- coding: utf-8 -*-

import numpy as np
from scipy.spatial import KDTree


[docs] def min_dist_to_centroid(bundle_pts, centroid_pts, nb_pts): """ Compute minimal distance to centroids Parameters ---------- bundles_pts: np.array centroid_pts: np.array nb_pts: int Returns ------- Array: """ tree = KDTree(centroid_pts, copy_data=True) dists, labels = tree.query(bundle_pts, k=1) dists, labels = np.expand_dims( dists, axis=1), np.expand_dims(labels, axis=1) labels = np.mod(labels, nb_pts) sum_dist = np.expand_dims(np.sum(dists, axis=1), axis=1) weights = np.exp(-dists / sum_dist) votes = [] for i in range(len(bundle_pts)): vote = np.bincount(labels[i], weights=weights[i]) total = np.arange(np.amax(labels[i])+1) winner = total[np.argmax(vote)] votes.append(winner) return np.array(votes, dtype=np.uint16), np.average(dists, axis=1)