np.r_
è implementato nel file numpy/lib/index_tricks.py
. Questo è puro codice Python, senza materiale speciale compilato. Quindi non sarà più veloce dell'equivalente scritto con concatenate
, arange
e linspace
. È utile solo se la notazione si adatta al tuo modo di pensare e alle tue esigenze.
Nel tuo esempio solo salva la conversione dei scalari di liste o matrici:
In [452]: np.r_[0.0, np.array([1,2,3,4]), 0.0]
Out[452]: array([ 0., 1., 2., 3., 4., 0.])
errore gli stessi argomenti:
In [453]: np.concatenate([0.0, np.array([1,2,3,4]), 0.0])
...
ValueError: zero-dimensional arrays cannot be concatenated
corretto con l'aggiunta []
In [454]: np.concatenate([[0.0], np.array([1,2,3,4]), [0.0]])
Out[454]: array([ 0., 1., 2., 3., 4., 0.])
hstack
si occupa di ciò passando tutti gli argomenti tramite [atleast_1d(_m) for _m in tup]
:
In [455]: np.hstack([0.0, np.array([1,2,3,4]), 0.0])
Out[455]: array([ 0., 1., 2., 3., 4., 0.])
Così almeno nei casi più semplici è più simile a hstack
.
Ma la vera utilità di r_
arriva quando si desidera utilizzare le gamme
np.r_[0.0, 1:5, 0.0]
np.hstack([0.0, np.arange(1,5), 0.0])
np.r_[0.0, slice(1,5), 0.0]
r_
consente di utilizzare la sintassi :
che viene utilizzato in indicizzazione. Questo perché in realtà è un'istanza di una classe che ha un metodo __getitem__
. index_tricks
utilizza questo trucco di programmazione più volte.
Hanno gettato in altre campane-n-fischi
Utilizzando un imaginary
passo, utilizza np.linspace
per espandere la fetta piuttosto che np.arange
.
np.r_[-1:1:6j, [0]*3, 5, 6]
produce:
array([-1. , -0.6, -0.2, 0.2, 0.6, 1. , 0. , 0. , 0. , 5. , 6. ])
Non ci sono ulteriori dettagli nella documentazione.
Ho fatto alcuni test di tempo per tante fette in https://stackoverflow.com/a/37625115/901925
solo una comodità di notazione. 'np.r_ [1: 5, 3: 7]' versus 'np.concatenate (np.arange (....)'. Stessa velocità.Tutto finisce come una chiamata 'concatenata'. – hpaulj
Il codice completo è in https://github.com/numpy/numpy/blob/master/numpy/lib/index_tricks.py. 'r_' è un oggetto' AxisConcatenator' .Lettura istruttiva – hpaulj