【问题标题】:Function reads np.array - produces the mean for k nn to number p in np.array函数读取 np.array - 产生 k nn 到 np.array 中数字 p 的平均值
【发布时间】:2018-01-30 09:08:04
【问题描述】:

我需要定义一个函数,它读取一个 numpy 数组并为数组中与 p 数最近的 k 个点生成平均值。

例子:

array= np.array([1, 2, 3, 4, 5, 6, 7, 50, 24, 32, 9, 11, 12, 10])
p= 15 (**Note this is not a number in the array, I will need to find the 
number closest to p or p number itself)
k = 3

In this case, I would need to generate the mean for ([11, 12, 10)]
as they are closest to p = 15

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

我是新手,在这一点上非常困惑,觉得我已经用尽了我的资源。我觉得以前有人问过这个问题,但答案对于我所需要的来说太复杂了。

提前致谢。

【问题讨论】:

  • "Can Someone Help Me?" is not a valid SO question。这通常表明您需要的是与当地导师一起半小时或完成教程,而不是 Stack Overflow。
  • 这是作业吗?你想用什么样的东西?在这个非常微不足道的情况下,您应该从一点一点分解问题开始。为array 中的每个值查找与p 的距离,也许用这些值创建一个新数组,然后对该新数组进行排序,并取前三个值...
  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 on topichow to ask 在这里申请。

标签: python function numpy knn nearest-neighbor


【解决方案1】:

给定一个 (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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多