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]
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]
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
import numpy as np
a = np.arange(1, 10, 0.5)
print (a)
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
oh! Masz rację. Poprawię –
Myślę, że powiedział bez użycia pętli. – lmiguelvargasf
zbudowane w xrange
funkcji może generować całkowitymi Pythona tak:
xrange(start, stop, step)
Ale xrange
nie można zrobić pływaki.
Możesz z odpowiednim obejściem: http://stackoverflow.com/questions/477486/python-decimal-range-step-value .. jednak "numpy.arange" jest bardziej elegancki. – rayryeng
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]
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
użyć 'range' funkcja – lmiguelvargasf
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
nie działał z przyrostem zmiennym, jeśli użyję opcji np.arange, to jak uwzględnić przyrost po kroku? – efirvida