2016-07-27 4 views
3

Ich möchte (eine Scheibe von) ein maskiertes numpy Array zuweisen, aber nicht die Maske ändern. (Die Zuweisung löscht normalerweise die Maske (es sei denn, sie ist "hart"), was der Maskierung völlig entgegengesetzt zu sein scheint, aber das ist es, womit wir arbeiten müssen.) Ich möchte auch, dass diese Routine für unmaskierte Arrays funktioniert.Assign to masked numpy array ohne Maske zu entfernen?

Gibt es einen besseren Weg dies zu tun als die Maske zu speichern und wiederherzustellen?

a = np.ma.array([0, 1, 2], mask=[0, 1, 0]) 
mask = a.mask.copy() if np.ma.is_masked(a) else None  # Have to copy because it might be shared 
a[a < 2] = -1 
if mask is not None: 
    a.mask = mask 
print(a, a.data) 
# [-1 -- 2] [-1 -1 2] 

Dies ist Python 2, numpy 1.11.1.

Antwort

2

Ich denke, was Sie getan werden möchten, können:

a.data[a < 2] = -1 
1

die Frage in der Erforschung, fand ich eine Antwort:

np.copyto(a, -1, where=a < 2)