2015-04-22 76 views
4

我想獲得多維numpy數組中最大n值的索引。爲了得到一維numpy數組中最大n值的索引,我找到了this。在python的交互式shell中測試之後,似乎bottleneck.argpartsort不能對多維numpy數組產生影響。爲了獲得多維numpy數組中最大值的索引,我找到了this。它不能得到最大的n。我可以給出的方法是將多維numpy數組轉換爲{value:index}(由元組存在的索引)列表,然後按值對列表進行排序,並獲取索引。有什麼更容易或更多的表現?如何獲得多維numpy數組中最大n值的索引

+2

重塑一個維度,然後搜索,然後通過涉及重塑之前的維度的算術計算來獲得原始指標? –

+1

也許'flatten()'原始數組,然後使用你的1D解決方案,最後使用原始形狀計算真實的nD指數? – chw21

+0

第二個鏈接有什麼問題?你能告訴我們這個多維數組的一部分嗎?我不明白爲什麼它不應該工作... – plonser

回答

4

我沒有獲得bottleneck,所以在這個例子中,我使用argsort,但你應該能夠以同樣的方式使用它:

#!/usr/bin/env python 
import numpy as np 
N = 4 
a = np.random.random(20).reshape(4, 5) 
print(a) 

# Convert it into a 1D array 
a_1d = a.flatten() 

# Find the indices in the 1D array 
idx_1d = a_1d.argsort()[-N:] 

# convert the idx_1d back into indices arrays for each dimension 
x_idx, y_idx = np.unravel_index(idx_1d, a.shape) 

# Check that we got the largest values. 
for x, y, in zip(x_idx, y_idx): 
    print(a[x][y]) 
+0

使用['argpartition'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.argpartition.html) 'argsort',你就會贏得我的讚賞。 ;-) – Jaime

相關問題