2015-06-30 14 views
7

Czy istnieje sposób na utworzenie zakresu liczb w Pythonie takich jak MATLAB przy użyciu prostej składni, tj. Bez pętli. Na przykład:Jak utworzyć zakres liczb w Pythonie jak w MATLAB

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

+3

użyć 'range' funkcja – lmiguelvargasf

+4

Prawdopodobnie używasz 'numpy', istnieje podobny' arange'; Zauważ, że 'range' i' arange' są na wpół otwarte, ** wykluczają 'stop' ** (np.' np.arange (1, 10, 0.5) 'będzie' tablicą ([1., 1.5, 2., ..., 8.5, 9., 9.5]) '). Zakres – jonrsharpe

+0

nie działał z przyrostem zmiennym, jeśli użyję opcji np.arange, to jak uwzględnić przyrost po kroku? – efirvida

Odpowiedz

4

Jak inni zwrócili uwagę , np.arange przybliża ci to, do czego przywykłeś z Matlaba. Jednak np.arange wyklucza punkt końcowy. Rozwiązanie zaproponowane we własnej odpowiedzi może doprowadzić do złych wyników (zobacz mój komentarz).

to jednak zawsze będzie działać:

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

Dla dalszego czytania: Zwłaszcza jeśli jesteś doświadczonym MATLAB-user, ten poradnik/cheat arkusz może być interesujące: http://wiki.scipy.org/NumPy_for_Matlab_Users

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

Dlaczego chcesz przekonwertować 'tablicę' z powrotem na' listę' (a jeśli byłeś szczególnie zdeterminowany, aby to zrobić, dlaczego '[a dla a ...]' zamiast 'list (...)') ?! – jonrsharpe

+0

oh! Masz rację. Poprawię –

+2

Myślę, że powiedział bez użycia pętli. – lmiguelvargasf

1

zbudowane w xrange funkcji może generować całkowitymi Pythona tak:

xrange(start, stop, step) 

Ale xrange nie można zrobić pływaki.

+0

Możesz z odpowiednim obejściem: http://stackoverflow.com/questions/477486/python-decimal-range-step-value .. jednak "numpy.arange" jest bardziej elegancki. – rayryeng

5

Numpy ma arange i r_ które wyglądają mniej więcej tak:

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] 

Zauważ, że to jest trochę inna niż Matlab, pierwsza kolejność przystanku i kroku są odwrócone w numpy porównaniu do Matlab, a po drugie zatrzymanie nie jest uwzględniane w wyniku. Można również rozważyć użycie linspace to często preferowane przez arange kiedy pracujesz z liczb zmiennoprzecinkowych ponieważ num można zdefiniować bardziej precyzyjnie niż step:

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

lub

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

brakuje nawiasu na 'print (np.linspace (1, 3, num = 5)' może być 'print (np.linspace (1, 3, num = 5))' ale dzięki !!! +1. problem z użyciem 'np.append (np.arange (start, stop, step), stop)' – efirvida