import math
def closest(position, positions):
x0, y0 = position
dbest, ibest = None, None
for i, (x,y) in enumerate(positions):
# compute the Euclidean distance
dist = ((x - x0) ** 2) + ((y - y0) ** 2)
dist = math.sqrt(dist)
if dbest is None or dist < dbest:
dbest, ibest = dist, i
return ibest
import random
positions = [(random.random(), random.random()) for i in range(10000000)]
for i in range(0, 10):
print(positions[i])
%timeit p = closest((.5, .5), positions)
print( positions[closest((.5, .5), positions)] )
import numpy as np
positions = np.array(positions)
positions.shape
print(positions[:10,:])
x, y = positions[:,0], positions[:,1] # x and y are arrays containing the 1st and 2nd cols, respectively.
distances = np.sqrt((x - 0.5)**2 + (y - 0.5)**2)
closest_dist = distances.min()
%%timeit
distances = np.sqrt( (x - 0.5)**2 + (y - 0.5)**2 )
%%timeit
closest_dist = distances.min()