NumPy提出了一种获取数组最大值索引的方法np.argmax.
我想要一个类似的东西,但返回N最大值的索引.
例如,如果我有一个数组,[1, 3, 2, 4, 5],function(array, n=3)将返回的索引[4, 3, 1]相对应的元素[5, 4, 3].
我一直在寻找一种有效的方法来计算 numpy 数组中的第 n 个最大值,这个答案将我引向np.partition。
顺便说一句,我注意到对于少于 100 个条目的数组,简单排序比 np.partition 方法更快。(相反,对于大型阵列,增益是显而易见的)
对于小型数组,np.partition 运行时间几乎持平的原因是什么?
生成图片的代码:
import pandas as pd
import numpy as np
import timeit
def func_1(inp):
return np.partition(inp, 10)[10]
def func_2(inp):
return np.sort(inp)[10]
a = []
b = []
N_tests = int(1e5)
for wdw in range(20, 1000, 10):
print wdw
res1 = timeit.timeit("func_1(test)",
setup = "import pandas as pd; import numpy as np; wdw_size = %d; test = np.random.randn(wdw_size); from __main__ import func_1"%wdw, number = N_tests)
a.append(res1) …Run Code Online (Sandbox Code Playgroud) 我有一个np.ndarray如下:
[[ inf 1. 3. 2. 1.]
[ inf inf 2. 3. 2.]
[ inf inf inf 5. 4.]
[ inf inf inf inf 1.]
[ inf inf inf inf inf]]
Run Code Online (Sandbox Code Playgroud)
有没有办法获得该nd数组中m个最小项的索引和值?所以,如果我想要4个最小的那个
[(0,1,1),(0,4,1),(3,4,1),(0,3,2)]
Run Code Online (Sandbox Code Playgroud)
其中(row,col,val)是上面的符号.
如果有多个值,则只需随机选择其中一个值.例如,有3个,然后下一个最小值是2,但(0,3,2),(1,2,2),(1,4,2)都是可能的选择.
本质上,我可以有效地从上三角矩阵中提取该格式的k个最小值(矩阵比上面的例子大得多).我尝试使用方形,最小的方法展平它,但是我很难将索引和值对齐.谢谢!
我有一个ndarray,每行是一个单独的直方图.对于每一行,我希望找到前N个值.
我知道全局前N个值的解决方案(在numpy数组中找到最大N个元素的快速方法),但我没有看到如何获得每行的前N个.
我可以遍历每一行并应用1D解决方案,但我不能用numpy广播做到这一点吗?
假设我有来自 Pytorch 或 Keras 预测的概率,结果是使用 softmax 函数
from scipy.special import softmax
probs = softmax(np.random.randn(20,10),1) # 20 instances and 10 class probabilities
probs
Run Code Online (Sandbox Code Playgroud)
我想从这个 numpy 数组中找到前 5 个索引。我想做的就是对结果运行一个循环,如下所示:
for index in top_5_indices:
if index in result:
print('Found')
Run Code Online (Sandbox Code Playgroud)
如果我的结果进入前 5 名,我就会得到结果。
Pytorch有top-k功能,我已经看到了numpy.argpartition,但我不知道如何完成这个?
我编写了这个简单的代码,用于执行查找整数列表中第二大项的简单任务:
def second_largest(input_list):
input_list.sort()
return input_list[-2]
Run Code Online (Sandbox Code Playgroud)
然而,对于大型列表,此功能可能非常无效,例如一百万个项目的运行时间超过 1.5 秒。
我知道这是因为该函数更改了列表本身(使用 .sort 方法),这对于长列表来说可能非常低效。如何执行此任务,而不必使用更改列表的低效方法?
提前谢谢大家。