2016-12-05 137 views
0

請考慮Python 3.5中我的numpy矩陣的以下圖片。 A是一個形狀矩陣(35,50)。矩陣的最大值,最大元素的索引

enter image description here

np.max(A)回報最大的權值線,最大的確是2372在我的數據集。但是當我試圖重現numpy的文件,如下所示:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.argmax.html

我沒有得到這樣的相似文檔中的結果的結果。所有的索引對都不相同。我嘗試了第一個索引對:A[18][29],但它是具有值506的元素的索引,當時我認爲這隻會返回矩陣最大值的索引。這使我有2個問題:

  1. 如果這些指標對都不是矩陣的最大的指數,即np.max(A),那麼它們是什麼?

  2. numpy是否有辦法返回任何給定形狀(我的形狀爲35,50)的矩陣內實際元素的索引?理想情況下,如果我輸入:A[row_index][column_index]我想輸出是價值等於np.max(A)標元素,在我的情況下,該值將是2372

我也不清楚爲什麼它不工作的我期望它的方式,如果我不得不猜測,我會說它與數組中的數組有關,或者我只是沒有使用正確的numpy擴展。

請指教,

謝謝

回答

1

row_index是最大的每一列,50列,50個指數的指數。

col_index是每行最大值的索引,35個值。

在這兩個數組中配對值沒有意義。是的,其中的一對將成爲整個數組max的索引,但您無法通過查看它們來判斷。

========================

In [573]: x 
Out[573]: 
array([[15, 8, 6, 3, 4, 5], 
     [22, 1, 13, 10, 18, 7], 
     [21, 14, 20, 16, 9, 2], 
     [11, 12, 23, 19, 17, 0]]) 
In [574]: i0=np.argmax(x,axis=0) 
In [575]: i1=np.argmax(x,axis=1) 
In [576]: i0 
Out[576]: array([1, 2, 3, 3, 1, 1], dtype=int32) 
In [577]: i1 
Out[577]: array([0, 0, 0, 2], dtype=int32) 

爲了獲取最大價值,我們必須將這些指標與正確的結合形狀爲np.arange

In [578]: x[i0,np.arange(6)] 
Out[578]: array([22, 14, 23, 19, 18, 7]) 
In [579]: x[np.arange(4),i1] 
Out[579]: array([15, 22, 21, 23]) 

23兩個都存在,但不是在同一個索引

In [580]: np.argmax(x) 
Out[580]: 20    # location in the flattened version of x 
In [581]: x.flat[20] 
Out[581]: 23 
In [582]: x[i0[2], i1[3]] # (3, 2) 
Out[582]: 23 

要扁平索引轉換成2D,使用:

In [583]: np.unravel_index(20,x.shape) 
Out[583]: (3, 2) 
In [584]: x[3,2] 
Out[584]: 23 
+0

很好的解釋,謝謝你對我的幫助看看這些numpy擴展應該如何工作 –