numpy可以評估多維數組中的N個最大元素嗎? 說:如何評估多維數組中的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
numpy可以評估多維數組中的N個最大元素嗎? 說:如何評估多維數組中的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
做到這一點,最簡單的方法就是進行排序,然後用最後n
號碼。這也可以在不改變原始數組的情況下完成。下面是一個例子,如何找到最大的10個號碼中的一個10×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])
這是爲O(n log n)的,雖然比O(N日誌K)(其中k是數項返回)的明顯實現(無想法如何在numpy中獲得)。如果我們不改變數組,它也是O(n)對O(k)和內存。 – Voo 2012-04-13 19:57:18
@Voo:使用堆隊列「你明白的解決方案」是什麼意思?在NumPy中沒有堆實現,即使對於非常大的數組,Python的heapq模塊也會比上面的代碼慢。你有什麼實用的建議如何改善這個代碼? – 2012-04-13 20:04:41
我應該說明顯的「算法」很抱歉。正如我所說我沒有看到任何方式在numpy本身有效地實現這一點。我假設寫一個特定於該問題的C擴展可行,但這樣做並不簡單。這很大程度上取決於n和k的大小,這對我們有什麼幫助。如果簡單的排序解決方案足夠好,顯然就是這樣。 – Voo 2012-04-13 20:09:08
這也可能是最有效的reverse-sort陣列,並且採取先N
元素:
a = [1,2,3]
sorted(a, reverse=True)[:2]
如果要查找多維數組中最大的元素,請使用a.ravel()
其中un滾動到一個維度
正如書面所述,這實際上並不使用numpy,但您可以使用np.sort
做類似的事情,不過您必須自己將其顛倒過來,例如,通過索引[::-1]
,巴洛克式的前瞻性
np.sort(a.ravel())[::-1][:2]
從標題判斷,我認爲OP希望將其應用於多維NumPy數組。 – 2012-04-13 19:51:56
對不起,請參閱重新編輯 – 2012-04-13 19:41:06