fork download
  1. import heapq
  2.  
  3. class KNN:
  4. def __init__(self, reference, distanceFn, K):
  5. self.reference = reference
  6. self.distanceFn = distanceFn
  7. self.k = K
  8. self.k_nearest = []
  9.  
  10. def observe(self, query):
  11. distances = self.distanceFn(query, self.reference)
  12.  
  13. for distance, patch in zip(distances, query):
  14. min_dist = float('inf')
  15. for dist in distance:
  16. if dist<min_dist:
  17. min_dist = dist
  18. heapq.heappush(self.k_nearest, (min_dist, patch))
  19. if len(self.k_nearest)>k:
  20. heapq.heappop(self.k_nearest)
  21.  
  22. @property
  23. def nearest_k(self):
  24. self.k_nearest.sort()
  25. nearest_k_return = [patch for _, patch in self.k_nearest]
  26. return np.array(sorted(nearest_k))
Success #stdin #stdout 0.02s 9080KB
stdin
Standard input is empty
stdout
Standard output is empty