Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #find the nearest point from a given point to a large list of points
- import numpy as np
- def distance(pt_1, pt_2):
- pt_1 = np.array((pt_1[0], pt_1[1]))
- pt_2 = np.array((pt_2[0], pt_2[1]))
- return np.linalg.norm(pt_1-pt_2)
- def closest_node(node, nodes):
- pt = []
- dist = 9999999
- for n in nodes:
- if distance(node, n) <= dist:
- dist = distance(node, n)
- pt = n
- return pt
- a = []
- for x in range(50000):
- a.append((np.random.randint(0,1000),np.random.randint(0,1000)))
- some_pt = (1, 2)
- closest_node(some_pt, a)
- def closest_node(node, nodes):
- nodes = np.asarray(nodes)
- dist_2 = np.sum((nodes - node)**2, axis=1)
- return np.argmin(dist_2)
- def closest_node(node, nodes):
- nodes = np.asarray(nodes)
- deltas = nodes - node
- dist_2 = np.einsum('ij,ij->i', deltas, deltas)
- return np.argmin(dist_2)
- from numpy import random
- from scipy.spatial import distance
- a = random.randint(1000, size=(50000, 2))
- some_pt = (1, 2)
- a[distance.cdist([some_pt], a).argmin()]
- a = []
- for x in range(50000):
- a.append((np.random.randint(0,1000),np.random.randint(0,1000)))
- a = np.random.randint(1000, size=(50000, 2))
- from scipy.spatial.distance import cdist
- def closest_node(node, nodes):
- return nodes[cdist([node], nodes).argmin()]
- Original:
- 1 loop, best of 3: 1.01 sec per loop
- Jaime v1:
- 100 loops, best of 3: 3.32 msec per loop
- Jaime v2:
- 1000 loops, best of 3: 1.62 msec per loop
- Mine:
- 100 loops, best of 3: 2.07 msec per loop
Add Comment
Please, Sign In to add comment