2016-06-13 10 views
1

Angenommen, ich möchte ein Array b erstellen, das eine Version des Arrays a mit der i 'ten Reihe auf Null gesetzt ist.Numpy: Funktionszuordnung?

Derzeit habe ich tun:

b = a.copy() 
b[i, :] = 0 

die ein bisschen ärgerlich, weil Sie nicht in lambdas tun können, und alles andere in numpy funktionsfähig ist. Ich mag würde eine ähnliche Funktion wie Theano des set_subtensor, wo Sie

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

oder

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

Soweit ich sagen kann, gehen könnte, gibt es nichts dergleichen in numpy. Oder ist es da?

bearbeiten

Die Antwort ist nein zu sein scheint, gibt es keine solche Funktion, müssen Sie eine selbst definieren. Siehe hpauljs Antwort.

+1

Können Sie ein vollständigeres Beispiel dafür geben, was Sie erreichen möchten? –

+0

http://stackoverflow.com/questions/6142604/functional-assignment-in-numpy beziehen Sie sich auch darauf. – Chathuranga

+0

Diese Frage hat ähnliche Wörter, ist aber etwas anderes. – Peter

Antwort

0

Wollen Sie eine einfache Funktion wie folgt aus:

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]]) 

Indexing nimmt ein Tupel wie (1, slice(None)).

Es gibt einige alternative Zuweisungsfunktionen wie put, place, copyto, aber keiner sieht wie diese Aufgabe aus.

Diese sind äquivalent:

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

Das heißt, wandelt der Python-Interpreter [] Syntax in einem Methodenaufruf.

Dies ist ein In-Place-Vorgang. Ich weiß nichts von dem, was zuerst eine Kopie macht.

Funktionen wie choose und where geben Kopien zurück, aber sie arbeiten (normalerweise) mit booleschen Masken, nicht mit Tupeln.