首页 > 解决方案 > Python Numpy 数组修改

问题描述

我有一个情节 y vs x。基于一些边界条件,我得到了一个 x 值列表和对应的 y 值

x = [2, 4, 8, 11, 18, 24, 31]

相应的 y 值为

y = [180, 139, 144, 90, 81, 109, 153]

输出是一个数组,它返回两倍的 x output =[4, 8, 16, 22, 36, 48, 62]

我的任务是将最终输出数组限制为最多 5 个值。这些值应对应于数组 y 中的 5 个最高值。

所以,我应该得到

output = [4, 8, 16, 48, 62]

此外,不同的数据集会给出不同的编号。x 和 y 值。因此,如果原始输出数组的值小于或等于 5 个,则应按原样打印。

我正在尝试用几行代码找到一种方法。

标签: pythonarraysnumpy

解决方案


您的问题基本上归结为如何获得数组的 n 个最高值的问题。你将需要argsort()这个。

if len(y) > 4:
    n_highest = 5
else:
    n_highest = len(y)

y_highest = y.argsort()[-n_highest:][::-1] # this gives you the indices of the five highest values of y

x_out = x[y_highest] * 2

如果您不想x_out被排序,而是反映原始排序,则必须遍历eatch item,询问是否在以下位置找到它的索引y_highest

x_out = [x[i]*2 for i in range(len(x)) if i in y_highest]

推荐阅读