gpt4 book ai didi

python - Numpy:返回一个数组,其中 n 个条目最接近给定数字

转载 作者:行者123 更新时间:2023-12-01 02:53:13 26 4
gpt4 key购买 nike

我有一个 numpy 数组 arr,我想用旧数组的 n 个元素创建一个新数组,这些元素最接近给定的数字x。我在这里找到了一个有用的答案(I have need the N minimum (index) values in a numpy array),但我的代码看起来非常笨拙(我是Python的初学者):

def give_array_with_closest(x, n, arr):
newar = np.absolute(arr - (np.ones(len(arr)) * x)) #Subtract x from all array entries and take absolute value, so that the lowest entries are the ones closest to x
indexar = (newar).argsort()[:n] #get array with indices from n lowest entries of newar
result = np.empty(n)
for i in range(n):
result[i] = arr[indexar[i]]
return result

由于我对索引不感兴趣,而只对实际条目感兴趣,因此在这种情况下,另一个问题的解决方案可能不是最好的。有没有更有效、更简单的方法来做到这一点?

最佳答案

  • 已经提到过,您不需要 for 循环来获取索引的值,您可以简单地使用 argsort 的结果来索引数组(在至少如果你的数组是一维的话)。

  • 但您也不需要对整个数组进行排序。您可以简单地使用 argpartition 。这可能比排序更快。

  • 补充一点:您可以使用矢量化运算,例如 arr - 1。这将从每个元素中减去 1,而无需手动创建新数组(如您的 np.ones(len(arr)))。

所以把这些放在一起:

def give_array_with_closest(x, n, arr):
indexarr = np.argpartition(abs(arr - x), n)[:n]
return arr[indexarr]

测试:

>>> give_array_with_closest(2, 3, np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))
array([2, 3, 1])

关于python - Numpy:返回一个数组,其中 n 个条目最接近给定数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44510186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com