2017-12-17 19 views
3

簡単な質問ですが、私は1Dのnumpy配列を取得したいと思います。各行は2次元アレイPython 2D Numpy Array to 1D(一種..)

[[ 0. 0. 1.] 
[ 0. 0. 1.] 
[ 0. 0. 1.] 
[ 0. 1. 0.] 
[ 0. 1. 0.] 
[ 0. 1. 0.] 
[ 0. 1. 0.] 
[ 1. 0. 0.]] 

に「1」の列インデックスからなる、それが1次元配列に変換することができる方法を、単一の「1」値を含み、2次元配列を指定

[2 2 1 1 1 1 0] 

どのように私はそれをPythonで行いますか? 私はそれについての専門用語を知らないが、そのような変換のための適切な用語を教えてください。

+1

ルック。 – Divakar

答えて

5

あなたは、第1の軸に沿った最大値でインデックスを探しています:与えられた軸に沿った最大値の

>>> a.argmax(axis=1) 
array([2, 2, 2, 1, 1, 1, 1, 0]) 

a.argmax(axis=None, out=None)

リターン指数。

他の値が必ずしも1未満でない場合は、最初に1をフィルタリングしてください。 これは、TrueFalseという値の配列を与えます。さて、argmax()を使用します。0よう1Falseなどの

>>> (a == 1).argmax(axis=1) 
array([2, 2, 2, 1, 1, 1, 1, 0]) 

True行為、intからbool継承ので。

0

各行に1つのホットエンコードされたベクトルのホットインデックスを取得したいようです。次のように

これが行うことができます。

  1. 乗算ベクトル[0 1 2]、またはより一般的で、あなたの行列:numpy.arange(matrix.shape[1])
  2. 合計アップあなたの行列の行:numpy.sum(matrix, axis=1)

numpyの配列はまた、持っています同じ結果につながる関数argmax

0

次のようnumpyのARGMAXを使用してそれを行うことができます。numpy.argmax` `ため

a=np.array([[ 0, 0, 1],[ 0, 0, 1], [ 0, 0, 1],[ 0, 1, 0],[ 0, 1, 0],[ 0, 1, 0],[ 1,0,0]]) 
a.argmax(1) 
array([2, 2, 2, 1, 1, 1, 0])