2

numpy 可以评估多维数组中的 N 个最大元素吗?说:

import numpy as np
a=[1,2,3]
b=a.max(num_of_max_elements=2) #I know it won't work, and I want it to be 2 and 3
4

3 回答 3

2

最简单的方法是排序,然后使用最后的n数字。这也可以在不更改原始数组的情况下完成。下面是一个如何在 10x10 数组中查找最大 10 个数字的示例:

a = numpy.random.randint(1000, size=100).reshape(10, 10)
indices = a.ravel().argsort()
print a.ravel()[indices[-10:]]

此代码打印类似

array([909, 917, 926, 936, 952, 960, 961, 964, 969, 993])
于 2012-04-13T19:48:02.017 回答
0

完全排序是不必要的。您可以在数组的负数上使用,对前n 个np.partition元素进行切片,然后取负数来反转初始转换。

如果您提供axis=None,则数组在排序前被展平。

np.random.seed(0)

a = np.random.randint(1000, size=100).reshape(10, 10)

res = -np.partition(-a, kth=10, axis=None)[:10]
# array([961, 999, 932, 937, 976, 916, 984, 910, 908, 901])

或者,您可以指定负数kth

res = np.partition(a, kth=-10, axis=None)[-10:]
# array([901, 908, 910, 916, 984, 932, 937, 999, 961, 976])

没有指定排序np.partition。在最坏的情况下,该解决方案需要 O( n ) 时间。

于 2018-11-06T14:08:55.473 回答
-1

对数组进行反向排序并获取第一个N元素可能是最有效的:

 a = [1,2,3]
 sorted(a, reverse=True)[:2]

如果要查找多维数组中的最大元素,请使用a.ravel()展开到一维的

正如所写,这实际上并没有使用 numpy,但是您可以使用 执行类似的操作np.sort,尽管您必须自己反转它,例如,通过使用 索引[::-1],给出相当巴洛克式的外观

np.sort(a.ravel())[::-1][:2]
于 2012-04-13T19:49:23.703 回答