简体   繁体   中英

vectorized / linear algebra distance between points?

Suppose I have an array of points,

import numpy as np
pts = np.random.rand(100,3)  # 1000 points, X, Y, Z along second dimension

The naive approach to calculate the distance between each combination of points involves a double for loop and will be excruciatingly slow for large numbers of points,

def euclidian_distance(p1, p2):
    d = p2 - p1
    return np.sqrt(d**2).sum()

out = np.empty((pts.shape[0], pts.shape[0]))
pts_swapped = pts.swapaxes(0,1)
for idx, point in enumerate(pts_swapped):
    for idx2, point_inner in enumerate(pts_swapped):
        out[idx,idx2] = euclidian_distance(point, point_inner)

How do I vectorize this calculation?

Take a look at the scipy.spatial.distance.cdist . I'm not sure but i assume that scipy optimized this quite a lot. If you use the pts array for both inputs, I assume you'll get an M x M array with zeros on the diagonal . function

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM