2016-04-18 24 views
1

numpy構造化配列の選択された行の1つのフィールドを簡単に変更する方法を探しています。ここに私のSWEは次のとおりです。numpy構造化配列から選択した行の1列を変更する方法

import numpy as np 
dt=np.dtype([('name',np.unicode,80),('x',np.float),('y',np.float)]) 
a=np.array([('a',0.,0.),('b',0.,0.),('c',0.,0.) ],dtype=dt) 
b=a.copy() 
a[a['name']=='a']['x']=1 
print a==b # return [ True True True] 

この例では、a==b結果は[False True True] .Actuallyを返す必要があり、私は「名前」フィールドからの私のアレイの行を選択したいと、それの一つのフィールドの値を変更します(ここでは「x」)。

+0

パンダに行く時間です。 df = pandas.Dataframe(a); df.loc [df.name == 'a'、 'x'] = 1。 –

答えて

2

答えが見つかりました...ポイントは、フィールドとマスクの位置です。マスクされた配列のフィールドを探すのではなく、フィールドの列にマスクを適用する必要があります:

a['x'][a['name']=='a']=1 
print a==b # returns [False True True] 
+1

インデックス付けの順序は、a [a ['name'] == 'a'] 'のような"高度なインデックス付け "は常に* copy *を返すので重要ですが、' a ['x '] 'は常に* view *を返します。 'a ['name'] == 'a'] = 1'で元の配列' a'に影響を与え、 'a ['name'] = = 'a'] ['x'] = 1'は 'a'には影響しません。 – unutbu

関連する問題