2016-12-05 8 views
0

Python 3.5の私のnumpy行列の次の図を考えてみましょう。 Aは形状(35,50)の行列です。行列の最大値、最大要素のインデックス

enter image description here

np.max(A)を含む行は、MAXが私のデータセットで実際に2372で、最大の正しい値を返します。しかし、私はここに見られるようにnumpyのドキュメントを再現しようとすると:

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

私は、マニュアルでの結果に似ている結果を取得できませんでした。すべてのインデックスペアが異なります。私は最初のインデックスのペアを試しました:A[18][29]しかし、これは値が506の要素のインデックスでした。これは、これが行列の最大値のインデックスのみを返すと考えたときでした。これらのインデックスのペアは、行列の最大のインデックスでない場合、彼らは何をしている、すなわちnp.max(A)

  1. :それは2つの質問で私を残し?

  2. numpyは、任意の形状のマトリックス内の実際の要素のインデックスを返します(私の形状は35,50です)?理想的には、私が入力した場合:私は出力がnp.max(A)に等しい値のスカラー要素になりたいA[row_index][column_index]、私の場合には値が2372

私はそれが働いていない理由は正確にはわからないだろうと私が推測しなければならないのであれば、配列内の配列と何か関係があると思います。あるいは、正しいnumpy拡張を使用していないだけです。

教えてください、

答えて

1

row_indexありがとうは、各列の最大値のインデックス、50列、50個の指標です。

col_indexは、各行の最大値、35の値です。

これら2つの配列の値をペアにすることは意味がありません。はい、これらのペアのうちの1つは、配列全体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拡張がどのように動作するのかを見てください –

関連する問題