def f(x):
x=x/5.
return x
def g(x):
x/=5.
return x
x_var = np.arange(5,dtype=np.double)
f(x_var)
print x_var
g(x_var)
print x_var
Output:
[ 0. 1. 2. 3. 4.]
[ 0. 0.2 0.4 0.6 0.8]
Questo comportamento è un po 'strano per me, ho sempre pensato x/= 5. era equivalente a x = x/5. . Ma chiaramente la funzione g (x) non crea un nuovo riferimento con/= operazione. Qualcuno potrebbe offrire una spiegazione per questo?Comportamento imprevisto per numpy self division
Grazie per la spiegazione, non sono riuscito a trovare la documentazione che mi avrebbe portato a prevedere questo comportamento. – bluecat
Questo non è un problema di numpy, è un oggetto che passa per problema di riferimento. L'implementazione predefinita di tutti '__i * __' è di eseguire l'operazione sul posto se possibile, leggere i [documenti] (http://docs.python.org/reference/datamodel.html#object.__iadd__). Avrai lo stesso problema passando una lista Python ad una funzione che ha fatto "def f (a): a * = 3; return a', modificherebbe l'oggetto originale con il quale l'hai chiamato, non semplicemente restituirà una copia modificata. – Jaime
Grazie, questo era il riferimento alla documentazione che stavo cercando. Quindi dovrebbe eseguire l'operazione sul posto, se possibile. Se __i * __ non è disponibile, per impostazione predefinita verrà eseguita l'operazione __ * __ normale. – bluecat