我在Python中有以下数组:
points_list = [point0, point1, point2]
Run Code Online (Sandbox Code Playgroud)
其中每个points_list类型:
class point:
__init__(self, coord, value):
self.coord = numpy.array(coord)
self.value = value
# etc...
Run Code Online (Sandbox Code Playgroud)
功能:
def distance(x,y):
return numpy.linalg.norm(x.coord - y.coord)
Run Code Online (Sandbox Code Playgroud)
我在point_a其他地方有一个观点.现在我想找到points_list最接近的点point_a.
除了循环之外,在Python中执行此操作的最佳方法是什么?
Sil*_*ost 13
你试过这个吗?
min(points_list, key=lambda x: distance(x, point_a))
Run Code Online (Sandbox Code Playgroud)
回答评论中的问题:lambda这里确实是必要的,因为指定为key参数的函数只需要接受一个参数.
但是,由于您point_a基本上是全局的,因此可以将其"硬编码"到distance函数中:
>>> point_a = point([1, 2, 3], 5)
>>> def distance(x):
return numpy.linalg.norm(x.coord - point_a.coord)
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以完全distance跳过作为关键参数传递lambda.
>>> min(points_list, key=distance)
Run Code Online (Sandbox Code Playgroud)