我有一个 y 与 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 个,则应按原样打印。
我正在尝试找到一种方法来通过几行代码来完成此操作。
最佳答案
您的问题基本上归结为如何获取数组的 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
进行排序,而是希望反射(reflect)原始排序,则必须迭代 eatch item,询问是否在 y_highest< 中找到其索引
:
x_out = [x[i]*2 for i in range(len(x)) if i in y_highest]
关于Python Numpy 数组修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53650813/