
numpy.arange() e numpy.linspace() generano numpy.ndarray con valori equidistanti.
La differenza è che l’intervallo è specificato per np.arange() e il numero di elementi è specificato per np.linspace().
Questo articolo descrive quanto segue:
- Specificare l’intervallo:
numpy.arange()
- Specificare il numero di elementi:
numpy.linspace()
- Utilizzo di base
- Includi stop o no:
endpoint
- Ottieni l’intervallo:
retstep
- Converti in ordine inverso
- Converti in un array multidimensionale
Specificare l’intervallo:numpy.arange()
numpy.arange() è simile alla funzione interna di Python range(). Vedere il seguente articolo per gamma().
numpy.arange() genera numpy.ndarray con valori equidistanti come segue in base al numero di argomenti specificati.
- numpy.arange(stop)
- numpy.arange(start, stop)
- numpy.arange(start, stop, step)
- inizio <= n < stop (crescente per gradi)
import numpy as np
print(np.arange(3))
# [0 1 2]
print(np.arange(3, 10))
# [3 4 5 6 7 8 9]
print(np.arange(3, 10, 2))
# [3 5 7 9]
A differenza di range(), puoi specificare float come argomento per numpy.arange().
print(np.arange(0.3, 1.0, 0.2))
# [0.3 0.5 0.7 0.9]
Il comportamento con valori negativi è lo stesso di range(). Allo stesso modo, se non esiste un valore corrispondente, generi un numpy.ndarray vuoto.
print(np.arange(-3, 3))
# [-3 -2 -1 0 1 2]
print(np.arange(10, 3))
# []
print(np.arange(10, 3, -2))
# [10 8 6 4]
Il tipo di dati dtype viene selezionato automaticamente, ma è possibile specificare con l’argomento dtype.
print(np.arange(3, dtype=float))
# [0. 1. 2.]
print(np.arange(3, 10, dtype=float))
# [3. 4. 5. 6. 7. 8. 9.]
print(np.arange(3, 10, 2, dtype=float))
# [3. 5. 7. 9.]
Per ulteriori informazioni sul tipo di dati dtype in NumPy, vedere l’articolo seguente.
Specificare il numero di elementi:numpy.linspace()
Utilizzo di base
Con numpy.linspace(), puoi specificare il numero di elementi invece dell’intervallo.
Specificare il valore iniziale nel primo argomento start, il valore finale nel secondo argomento stop e il numero di elementi nel terzo argomento num. L’intervallo viene calcolato automaticamente in base a tali valori.
import numpy as np
print(np.linspace(0, 10, 3))
# [ 0. 5. 10.]
print(np.linspace(0, 10, 4))
# [ 0. 3.33333333 6.66666667 10. ]
print(np.linspace(0, 10, 5))
# [ 0. 2.5 5. 7.5 10. ]
Gestisce correttamente anche il caso di avvio > arresta.
print(np.linspace(10, 0, 5))
# [10. 7.5 5. 2.5 0. ]
Il tipo di dati dtype viene selezionato automaticamente, ma è possibile specificare con l’argomento dtype.
print(np.linspace(0, 10, 3, dtype=int))
# [ 0 5 10]
Includi stop o no:endpoint
Per impostazione predefinita, il valore di stop è incluso nel risultato.
Se l’argomento endpoint è impostato su False, il risultato non include stop.
print(np.linspace(0, 10, 5))
# [ 0. 2.5 5. 7.5 10. ]
print(np.linspace(0, 10, 5, endpoint=False))
# [0. 2. 4. 6. 8.]
La relazione tra l’endpoint dell’argomento e il passaggio dell’intervallo è la seguente.
- endpoint=True (predefinito)
- passo = (fermata – partenza) / (num – 1)
- punto finale=falso
- passo = (fermata – partenza) / num
Ottieni l’intervallo:retstep
Se si desidera ottenere l’intervallo, impostare l’argomento retstep su True.
In questo caso, numpy.linspace() restituisce una tupla con due elementi, (numpy.ndarray, step).
result = np.linspace(0, 10, 5, retstep=True)
print(result)
# (array([ 0. , 2.5, 5. , 7.5, 10. ]), 2.5)
print(type(result))
# <class 'tuple'>
print(result[0])
# [ 0. 2.5 5. 7.5 10. ]
print(result[1])
# 2.5
Se vuoi controllare solo il passaggio, ottieni il secondo elemento con l’indice.
print(np.linspace(0, 10, 5, retstep=True)[1])
# 2.5
print(np.linspace(0, 10, 5, retstep=True, endpoint=False)[1])
# 2.0
Converti in ordine inverso
Con numpy.arange(), puoi ottenere un array in ordine inverso se specifichi gli argomenti correttamente, ma è problematico.
print(np.arange(3, 10, 2))
# [3 5 7 9]
print(np.arange(9, 2, -2))
# [9 7 5 3]
È facile usare slice [::-1] o numpy.flip().
print(np.arange(3, 10, 2)[::-1])
# [9 7 5 3]
print(np.flip(np.arange(3, 10, 2)))
# [9 7 5 3]
Nel caso di numpy.linspace(), puoi facilmente invertire l’ordine sostituendo il primo argomento start e il secondo argomento stop. Il risultato è lo stesso con slice [::-1] e numpy.flip().
print(np.linspace(0, 10, 5))
# [ 0. 2.5 5. 7.5 10. ]
print(np.linspace(10, 0, 5))
# [10. 7.5 5. 2.5 0. ]
print(np.linspace(0, 10, 5)[::-1])
# [10. 7.5 5. 2.5 0. ]
print(np.flip(np.linspace(0, 10, 5)))
# [10. 7.5 5. 2.5 0. ]
Converti in un array multidimensionale
Né numpy.arange() né numpy.linspace() hanno argomenti per specificare la forma. Usa reshape() per cercare in un array multidimensionale.
print(np.arange(12).reshape(3, 4))
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
print(np.arange(24).reshape(2, 3, 4))
# [[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
#
# [[12 13 14 15]
# [16 17 18 19]
# [20 21 22 23]]]
print(np.linspace(0, 10, 12).reshape(3, 4))
# [[ 0. 0.90909091 1.81818182 2.72727273]
# [ 3.63636364 4.54545455 5.45454545 6.36363636]
# [ 7.27272727 8.18181818 9.09090909 10. ]]
print(np.linspace(0, 10, 24).reshape(2, 3, 4))
# [[[ 0. 0.43478261 0.86956522 1.30434783]
# [ 1.73913043 2.17391304 2.60869565 3.04347826]
# [ 3.47826087 3.91304348 4.34782609 4.7826087 ]]
#
# [[ 5.2173913 5.65217391 6.08695652 6.52173913]
# [ 6.95652174 7.39130435 7.82608696 8.26086957]
# [ 8.69565217 9.13043478 9.56521739 10. ]]]