我有两个元素数量相同的列表。每个元素都是一个数字(浮点数)。我需要在第一个列表中找到 10 个最大值,然后在第二个列表中找到那些与第一个列表中的 10 个最大值的索引具有相同索引的值。我怎样才能做到这一点? (如果可能的话,我想使用 numpy)。 例如:
a= [0.5, 2.9, 9.7]
b= [1, 3, 5.8]
我需要列表 a 中的 2 个最大值,即 2.9 和 9.7。它们的索引是 1 和 2,所以我需要列表 b 中的 3 和 5.8。
我还没试过,想过amax什么的,但是不知道
假设这个例子(为了清楚起见,这里使用整数,但这与浮点数相同)
a1 = np.array([11, 6, 13, 8, 9, 5, 7, 10, 3, 14, 12, 4, 2, 1, 0])
# top 10: x x x x x x x x x x
a2 = np.array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
numpy.argpartition
找到前 10 个值,然后索引您的第二个数组:
out = a2[np.argpartition(a1, -10)[-10:]]
# array([ 5, 1, 6, 3, 4, 7, 10, 9, 2, 0])
如果你想要它们的顺序:
out = a2[np.sort(np.argpartition(a1, -10)[-10:])]
# array([ 0, 1, 2, 3, 4, 5, 6, 7, 9, 10])