2016-04-13 15 views
1

あなたがそれを行う方法を知っていれば、これは超簡単質問かもしれませんが、私はちょうど構文を把握することはできません。Pythonの間接的なインデックス

私は5×ゼロの配列がありますy1 = np.zeros((5,10))との配列5X1をインデックス:index=np.array([2,3,2,5,6])y1の行ごとに、インデックスで指定された列に1を設定したいと思います。結果は次のようになります

array([[ 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.], 
    [ 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.], 
    [ 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.], 
    [ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.], 
    [ 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.]]) 

誰でもお手伝いできます:-)?

答えて

0

array[index_1, index_2]を使用して多次元配列インデックスを作成できます。問題のために:

y1[range(y1.shape[0]), index] = 1 

範囲(y1.shape [0])nはY1の行数である配列[0,1,...,n-1]を生成します。この配列は行インデックスであり、indexは列インデックスです。

+0

うん、それは動作しています!どうもありがとう! – Chea

0

ただ、これはあなたがやりたいん列挙()

import numpy as np 

y1 = np.zeros((5,10)) 
index=np.array([2,3,2,5,6]) 


for i,item in enumerate(y1): 
    item[index[i]] = 1 

print(y1) 
# [[ 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.] 
# [ 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] 
# [ 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.] 
# [ 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] 
# [ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]] 

を使うのか?

+0

申し訳ありませんが、私は非常に遅いので、forループを使用したくないことを言及する必要があります。私はベクトル化された解決策を探しています – Chea

関連する問題