Python Numpy数组修改

时间:2018-12-06 11:49:22

标签: python arrays numpy

我有一个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,则应按原样打印。

我正在尝试找到一种通过几行代码来实现此目的的方法。

2 个答案:

答案 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]