Mi aspettavo np.fromfunction(lambda i: 1, (4,), dtype=int)
per restituire array([1, 1, 1, 1])
, ma restituisce invece il numero intero 1
. Qualcuno può spiegarmi perché numpy.fromfunction si comporta in questo modo? Sembra avere qualcosa a che fare con la definizione della funzione anonima (cioè, se un parametro della funzione è effettivamente usato).Risultato imprevisto - numpy dalla funzione con funzioni costanti
>>> import numpy as np
>>> np.fromfunction(lambda i: i, (4,), dtype=int)
array([0, 1, 2, 3])
>>> np.fromfunction(lambda i: 1, (4,), dtype=int)
1
>>> np.fromfunction(lambda i: 1 + i*0, (4,), dtype=int)
array([1, 1, 1, 1])
EDIT: Per chiarire, il mio obiettivo finale non è quello di creare array([1, 1, 1, 1])
utilizzando questo metodo. Piuttosto, sto facendo una chiamata di modulo
np.fromfunction(lambda i: **an expression that doesn't depend on i**, (n,))
In altre parole, sto cercando di inizializzare una matrice NumPy ripetutamente effettuando una chiamata ad una funzione. (C'è una chiamata a np.random.random() in quella funzione, quindi non sto facendo le chiamate ridondanti.)
Se l'espressione non dipende da 'i', sospetto che si possa sostituire l'uso di' a = np.fromfunction (lambda i: ** un'espressione che non dipende da i **, (n,)) 'con qualcosa come' a = ** un'espressione che non dipende da i ** ', e nell'espressione usa qualcosa come' np.ones (n) ',' np.arange (n) ', ecc., per fare in modo che l'espressione crei una matrice della dimensione appropriata. –
@WarrenWeckesser Non sono sicuro di aver capito. Il tuo metodo funzionerà anche se c'è una chiamata a 'np.random.random()' dentro '** un'espressione che non dipende da i ** '? –
Puoi usare l'argomento 'size' di' np.random.random'. Se la tua espressione è, per esempio, '4 * u ** 2 + 1' dove' u' è casuale, puoi scrivere 'a = 4 * np.random.casuale (dimensione = n) ** 2 + 1'. –