NumPy提出了一种获取数组最大值索引的方法np.argmax.
我想要一个类似的东西,但返回N最大值的索引.
例如,如果我有一个数组,[1, 3, 2, 4, 5],function(array, n=3)将返回的索引[4, 3, 1]相对应的元素[5, 4, 3].
给定一个如下形式的 numpy 数组:
x = [[4.,3.,2.,1.,8.],[1.2,3.1,0.,9.2,5.5],[0.2,7.0,4.4,0.2,1.3]]
Run Code Online (Sandbox Code Playgroud)
有没有办法在 python 中保留每行中的前 3 个值并将其他值设置为零(无需显式循环)。上面示例的结果将是
x = [[4.,3.,0.,0.,8.],[0.,3.1,0.,9.2,5.5],[0.0,7.0,4.4,0.0,1.3]]
Run Code Online (Sandbox Code Playgroud)
一个例子的代码
import numpy as np
arr = np.array([1.2,3.1,0.,9.2,5.5,3.2])
indexes=arr.argsort()[-3:][::-1]
a = list(range(6))
A=set(indexes); B=set(a)
zero_ind=(B.difference(A))
arr[list(zero_ind)]=0
Run Code Online (Sandbox Code Playgroud)
输出:
array([0. , 0. , 0. , 9.2, 5.5, 3.2])
Run Code Online (Sandbox Code Playgroud)
上面是我的一维 numpy 数组的示例代码(有很多行)。循环遍历 numpy 数组的每一行并重复执行相同的计算将非常昂贵。有没有更简单的方法?
我有一份清单清单
list_of_lists = [['a',1,19,5]['b',2,4,6],['c',22,5,9],['d',12,19,20]]
Run Code Online (Sandbox Code Playgroud)
而且我想获得具有最高值的前x个列表,因此前3个max(list_of_lists)将返回
[['c',22, 5,9],['d',12,19,20],['a',1,19,5]]
Run Code Online (Sandbox Code Playgroud)
或者,如果我循环,list_of_lists我可以根据所选列表的索引将每个列表中的最高x max值附加到另一个列表列表中.
这是我正在使用的代码,但它有缺陷,因为我认为我需要在每个循环结束时删除所选答案,因此它不会出现在下一个循环中,它只查看第4列(x [3])
for y in case_list:
last_indices = [x[3] for x in case_list]
print("max of cases is: ",max(last_indices))
Run Code Online (Sandbox Code Playgroud)
目前的输出是:
max of cases is: 22
max of cases is: 22
max of cases is: 22
Run Code Online (Sandbox Code Playgroud)
这个答案给出了最高的最大列表,但我希望能够灵活地返回顶部x而不是一个.
此答案给出了单个列表中的前x个值.