Python 如何获得多维数组的k个顶部元素,而不是argmax给出的
我有一个np.argmaxmodel.predictX格式的预测,axis=2返回一个元素。如何使用numpy预测前k个元素@desertnaut提供的链接涵盖了1D的情况。然而,沿着轴推广到ND并不完全是微不足道的 下面是一个示例,其中我们沿轴1找到顶部2:Python 如何获得多维数组的k个顶部元素,而不是argmax给出的,python,numpy,Python,Numpy,我有一个np.argmaxmodel.predictX格式的预测,axis=2返回一个元素。如何使用numpy预测前k个元素@desertnaut提供的链接涵盖了1D的情况。然而,沿着轴推广到ND并不完全是微不足道的 下面是一个示例,其中我们沿轴1找到顶部2: >>> a = np.random.randint(0, 9, (3, 5, 6)) >>> b = a.argpartition(-2, axis=1)[:, -2:] >>> i,
>>> a = np.random.randint(0, 9, (3, 5, 6))
>>> b = a.argpartition(-2, axis=1)[:, -2:]
>>> i, j, k = a.shape
>>> i, j, k = np.ogrid[:i, :j, :k]
>>> b = b[i, a[i, b, k].argsort(axis=1), k]
>>> a
array([[[8, 4, 1, 2, 4, 8],
[0, 1, 3, 4, 2, 7],
[4, 2, 7, 8, 1, 4],
[1, 6, 2, 0, 3, 7],
[1, 0, 0, 2, 8, 1]],
[[1, 6, 3, 3, 0, 6],
[7, 2, 0, 3, 8, 5],
[5, 0, 1, 1, 7, 4],
[2, 2, 4, 2, 6, 2],
[5, 5, 7, 6, 8, 1]],
[[4, 4, 4, 6, 2, 5],
[2, 7, 8, 2, 6, 0],
[5, 6, 7, 5, 1, 6],
[6, 5, 3, 2, 2, 3],
[5, 1, 8, 1, 6, 8]]])
>>> a[i, b, k]
array([[[4, 4, 3, 4, 4, 7],
[8, 6, 7, 8, 8, 8]],
[[5, 5, 4, 3, 8, 5],
[7, 6, 7, 6, 8, 6]],
[[5, 6, 8, 5, 6, 6],
[6, 7, 8, 6, 6, 8]]])
一般函数可能看起来像
def argtopk(A, k, axis=0):
tk = A.argpartition(-k, axis=axis)[(*axis*(slice(None),), slice(-k, None))]
I = np.ogrid[(*map(slice, A.shape),)]
I[axis] = tk
I[axis] = A[I].argsort(axis=axis)
return tk[I]
Google find top k elements numpy array给出的第一个结果是,第二个可能是@desertnaut的副本,那么你认为他们有什么想法?不知道-正如我所说的,还不清楚!:让我们等待反馈…@paulpanzer我期待相同的概念,但函数argtopk不起作用。请修改它accordingly@rachana_sharma003这对我来说非常有效。请确保您使用的是最新的python和numpy版本,并且您提供了正确的输入。该函数采用一个numpy数组,一个int,可选另一个int。如果在做出合理的努力后,您仍然无法使其正常工作,您可以返回并正确描述您的设置、您尝试的输入和收到的错误。