È generalmente sicuro fornire l'array di input come argomento opzionale out a un ufunc in numpy, a condizione che il tipo sia corretto? Ad esempio, Ho verificato che i seguenti lavori:Numpy passa all'array di input come argomento `out` su ufunc
>>> import numpy as np
>>> arr = np.array([1.2, 3.4, 4.5])
>>> np.floor(arr, arr)
array([ 1., 3., 4.])
Il tipo array deve essere compatibile o identici con l'uscita (che è un galleggiante per numpy.floor()
), o questo accade:
>>> arr2 = np.array([1, 3, 4], dtype = np.uint8)
>>> np.floor(arr2, arr2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ufunc 'floor' output (typecode 'e') could not be coerced to provided output parameter (typecode 'B') according to the casting rule ''same_kind''
Quindi, dato che un array di tipo corretto, è generalmente sicuro applicare gli ufuncs sul posto? O è floor()
un caso eccezionale? La documentazione non rende chiaro, e nemmeno i seguenti due fili che hanno cuscinetto tangenziale sulla domanda:
EDIT:
Come supposizione del primo ordine, suppongo che sia spesso, ma non sempre sicuro, basato sul tutorial su http://docs.scipy.org/doc/numpy/user/c-info.ufunc-tutorial.html. Non sembra esserci alcuna restrizione sull'uso della matrice di output come supporto temporaneo per risultati intermedi durante il calcolo. Mentre qualcosa come floor()
e ciel()
potrebbe non richiedere l'archiviazione temporanea, potrebbero essere necessarie funzioni più complesse. Detto questo, l'intera libreria esistente potrebbe essere scritta con questo in mente.
Non è tecnicamente un ufunc, ma l'utilizzo del parametro 'out' in' np.dot' in questo modo con gli array 2D può produrre risultati errati. –
Questo è quasi il controesempio che stavo cercando, ma non del tutto :) –
I [ufunc docs] (http://docs.scipy.org/doc/numpy/reference/ufuncs.html) menzionano usando 'add (G, C, G) 'come ottimizzazione di' G = G + C', nel suggerimento sotto "Operazioni matematiche". Direi che è sicuro. (D'altra parte, chiamare ufuncs con input e output sovrapposti ma non identici * causerà problemi.) – user2357112