2016-06-13 10 views
1

配列bを作成し、配列aのバージョンで、i '番目の行をゼロに設定したいとします。Numpy:機能割り当てですか?

現在、私がしなければならない:

あなたがラムダであり、numpyの中に他のすべてが機能していることを行うことができないので、少し迷惑です
b = a.copy() 
b[i, :] = 0 

。私はそのようなものは何もnumpyの中にありません、あなたは私の知る限り

b = a.set_subtensor((i, slice(None)), 0) 

または

b = np.set_subtensor(a, (i, slice(None)), 0) 

を行くことができるtheanoのset_subtensorと同様の機能を、したいと思います。それとも?

編集

答えはノー、そのような機能はありませんように見える、あなたは1を自分で定義する必要があります。 hpauljの応答を参照してください。

+1

あなたは達成しようとしているもののより完全な例を挙げることができますか? –

+0

http://stackoverflow.com/questions/6142604/functional-assignment-in-numpyこれも参照してください。 – Chathuranga

+0

その質問はそれに似た言葉を持っていますが、何か違うところです。 – Peter

答えて

0

あなたはこのような単純な機能を意味します:

def subtensor(a, ind, val): 
    b=a.copy() 
    b[ind] = val 
    return b 

In [192]: a=np.arange(12).reshape(3,4) 

In [194]: subtensor(a,(1,slice(None)),0) 
Out[194]: 
array([[ 0, 1, 2, 3], 
     [ 0, 0, 0, 0], 
     [ 8, 9, 10, 11]]) 

をインデックス作成は(1, slice(None))のようなタプルをとります。

putplacecopytoのような代替割り当て関数がありますが、このタスクのようには見えません。

これらは同等です:

b[0,:] = 1 
b.__setitem__((0,slice(None)),1) 

つまり、Pythonインタプリタは、メソッド呼び出しに[]構文に変換します。

これはインプレース操作です。最初にコピーを作成するものは分かりません。

choosewhereのように機能しますが、(通常は)ブール値のマスクで動作し、インデックス付けタプルでは機能しません。

関連する問題