2009-06-03 22 views
73

In una numpy può usare l'oggetto 'newaxis' nella sintassi affettamento per creare un asse di lunghezza, ad esempio:Numpy: Devo usare newaxis o None?

import numpy as np 
print np.zeros((3,5))[:,np.newaxis,:].shape 
# shape will be (3,1,5) 

Il documentation states che si può anche usare None anziché newaxis, l'effetto è esattamente lo stesso.

C'è qualche motivo per scegliere l'uno rispetto all'altro? C'è una preferenza generale o una guida di stile? La mia impressione è che newaxis sia più popolare, probabilmente perché è più esplicito. Quindi c'è qualche ragione per cui è permesso None?

risposta

84

None è consentito perché numpy.newaxis è semplicemente un alias per None.

In [1]: import numpy 

In [2]: numpy.newaxis is None 
Out[2]: True 

Gli autori probabilmente scelto perché avevano bisogno di una comoda costante, e None era disponibile.

Per quanto riguarda il motivo per cui si dovrebbe preferire newaxis oltre None: principalmente è perché è più esplicita, e in parte perché un giorno il numpy autori potrebbe cambiare in qualcosa di diverso da None. (Non hanno intenzione di farlo, e probabilmente no, ma non c'è una buona ragione per preferire None.)

+0

Grazie, non avevo notato che np.newaxis è in realtà Nessuno. Allora andrò con newaxis. – nikow

+4

In realtà dicono che è possibile utilizzare None, quindi non possono cambiarlo ora: "L'oggetto newaxis può essere utilizzato nella sintassi di slicing di base discussa in precedenza.Nessuno può essere utilizzato al posto di newaxis." – endolith

+2

Nessuno è più breve :) – David