函数读取np.array - 在np.array中生成k nn到数字p的平均值

时间:2018-01-30 00:20:30

标签: python function numpy knn nearest-neighbor

我需要定义一个读取numpy数组的函数,并在数组中产生k个最近点到数字p的平均值。

示例:

bundle show rspec-rails

使用上述数字,我需要找到最接近p的k个点的平均值,p可以在数组中明确说明,也可以不是。

我现在很新,很困惑,觉得我已经耗尽了我的资源。我觉得之前已经问过这个问题,但答案对于我的需要来说太复杂了。

提前致谢。

1 个答案:

答案 0 :(得分:0)

给定(1d)数组arr和标量输入p,这里是你如何找到n最近值的平均值:

def neighbor_mean(arr, p, n=3):
    idx = np.abs(arr - p).argsort()[:n]
    return arr[idx].mean()

arr = np.array([1, 2, 3, 4, 5, 6, 7, 50, 24, 32, 9, 11, 12, 10])
neighbor_mean(arr, p=15)
# 11.0

在上文中,首先你采取绝对差异:

np.abs(arr - 15)
# array([14, 13, 12, 11, 10,  9,  8, 35,  9, 17,  6,  4,  3,  5])

然后argsort()返回将对数组进行排序的索引。我们对n - 最小的绝对差异感兴趣。这就是你真正想要的,而不是直接对差异进行排序。

np.abs(arr - p).argsort()[:3]
# array([12, 11, 13])

最后,您想要对输入数组arr建立索引,并取其平均值:

arr[[12, 11, 13]]
# array([12, 11, 10])  # mean: 11.0