2015-06-30 21 views
7

C'è un modo per creare un intervallo di numeri in Python come MATLAB usando una semplice sintassi, cioè, non usando i loop. Per esempio:Come creare un intervallo di numeri in Python come in MATLAB

MATLAB: a = 1:0.5:10 dare a = [1 1.5 2 2.5 3 3.5 .... 9.5 10]

+3

utilizzare il 'range' function – lmiguelvargasf

+4

Nel probabile evento che stai usando 'numpy', c'è un simile' arange'; nota che 'range' e' arange' sono entrambi semiaperti, essi ** escludono il 'stop' ** (es.' np.arange (1, 10, 0.5) 'sarà' array ([1., 1.5, 2., ..., 8.5, 9., 9.5]) '). L'intervallo – jonrsharpe

+0

non ha funzionato con l'incremento fluttuante, se utilizzo np.arange, quindi come includere l'incremento dopo? – efirvida

risposta

4

Come altri hanno fatto notare , np.arange ti avvicina di più a quello a cui sei abituato da Matlab. Tuttavia, np.arange esclude il punto finale. La soluzione che hai proposto nella tua risposta può portare a risultati sbagliati (vedi il mio commento).

Questo, tuttavia, funziona sempre:

start = 0 
stop = 3 
step = 0.5 
a = np.arange(start, stop+step, step) 

Per ulteriori approfondimenti: Soprattutto se si è un utente esperto MATLAB-, questa guida/cheat sheet potrebbe essere interessante: http://wiki.scipy.org/NumPy_for_Matlab_Users

2
import numpy as np 
a = np.arange(1, 10, 0.5) 
print (a) 
+5

Perché convertirai 'array' in un' elenco' (e, se tu fossi particolarmente determinato a farlo, perché '[a for a in ...]' piuttosto che 'list (...)') ?! – jonrsharpe

+0

oh! Hai ragione. Correggerò –

+2

Credo abbia detto senza usare i loop. – lmiguelvargasf

1

di Python costruito nel xrange funzione in grado di generare numeri interi in questo modo:

xrange(start, stop, step) 

Ma xrange non possono fare galleggianti.

+0

È possibile con la soluzione corretta: http://stackoverflow.com/questions/477486/python-decimal-range-step-value .. tuttavia, 'numpy.arange' è più elegante. – rayryeng

5

Numpy ha arange e r_ che sembrano qualcosa di simile:

import numpy as np 
print(np.arange(1, 3, .5)) 
# [ 1. 1.5 2. 2.5] 
print(np.r_[1:3:.5]) 
# [ 1. 1.5 2. 2.5] 

Si noti che si tratta di un po 'diverso da MATLAB, prima l'ordine del fermo e passo sono invertiti in NumPy rispetto a MATLAB, e la seconda la fermata non è incluso il risultato. Si potrebbe anche considerare l'utilizzo linspace è spesso preferibile rispetto arange quando si lavora con i numeri in virgola mobile a causa num può essere definito con maggiore precisione rispetto step:

print(np.linspace(1, 3, num=5)) 
# [ 1. 1.5 2. 2.5 3. ] 

o

print(np.linspace(1, 3, num=4, endpoint=False)) 
# [ 1. 1.5 2. 2.5] 
+0

parentesi errata su 'print (np.linspace (1, 3, num = 5)' può essere 'print (np.linspace (1, 3, num = 5))' ma grazie !!! +1 risolvo il mio problema usando 'np.append (np.arange (start, stop, step), stop)' – efirvida

Problemi correlati