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

Function reads np.array - produces the mean for k nn to number p in np.array

我需要定义一个函数,该函数读取一个 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 可以在数组中明确说明,也可以不明确说明。

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

提前致谢。

给定 (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() returns 对数组进行排序的索引 。我们感兴趣的是 n 最小的绝对差异。这才是您真正要寻找的,而不是直接对差异进行排序。

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

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

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