我有一个y vs x的图。 根据一些边界条件,我获得了x值和对应的y值的列表
x = [2, 4, 8, 11, 18, 24, 31]
对应的y值是
y = [180, 139, 144, 90, 81, 109, 153]
输出是一个返回x值两倍的数组
输出= [4, 8, 16, 22, 36, 48, 62]
我的任务是将最终输出数组限制为最多5个值。这些值应对应于数组y中的5个最高值。
所以,我应该得到
output = [4, 8, 16, 48, 62]
此外,不同的数据集将给出不同的编号。 x和y值。因此,如果原始输出数组的值小于或等于5,则应按原样打印。
我正在尝试找到一种通过几行代码来实现此目的的方法。
答案 0 :(得分:1)
您的问题基本上可以归结为关于如何获取数组的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项目,询问是否在y_highest
中找到其索引:>
x_out = [x[i]*2 for i in range(len(x)) if i in y_highest]
答案 1 :(得分:1)
您可以使用
重新排列数组array = sorted(array)
之后,您只需要参加前5个条款:
output = array[0:4]
请记住,我们需要写4而不是5,因为在Python数组的维度上,ar开始为0。您可以用更少的代码来做到这一点:
output = sorted(array)[0:4]