从 2D 数字点数组中获取最小 x 的点



此代码片段:

a = np.array([[1, 2], [0, 4], [3, 5]])
print(a[np.argmin(a[:, 0])])

从点的数组a[x, y] 中打印具有最小 X 坐标的点的坐标:

[0 4]

有没有比a[np.argmin(a[:, 0])]更直接的 Numpy 函数来完成相同的任务?

您可以使用内置的min()函数(即不np.min()),该函数接受可选的key参数,该参数是实现如何完成元素比较的函数。在这里,这将是

min(a, key=lambda point: point[0])

point[0]只是提取您所说的每个点的 x 坐标。返回值是point[0]为最小值的整个点。

以上是否比a[np.argmin(a[:, 0])]"更直接",真的取决于你。它们以相同的基本方式工作;循环遍历a,同时跟踪到目前为止的最小点(作为np.argmin()的索引和对min()点的引用)。虽然两者都在O(n)时间内运行,但我相信a[np.argmin(a[:, 0])]将是大型数组最快的。

对于使用 NumPy 的更直接的解决方案,我认为不存在。即使NumPy包含"np.minx()",这也肯定会以类似的方式实现,并且不会提供额外的好处。

(过度?)花哨的实现

在上面的min()解决方案中,我们动态构造了一个匿名函数,用于提取元素0。标准库实际上包含一个专门用于创建此类函数的工厂:

import operator
min(a, key=operator.itemgetter(0))

同样,这是等效的,但根据偏好,在页面上看起来可能会更好,也可能不会更好:-)

最新更新