2011-11-30 13 views
6

Szukam czegoś podobnego do listy w matlabie, ale nie mogłem znaleźć czegoś takiego w dokumencie.matlab Czy istnieje coś takiego jak rozumienie list, tak jak w pythonie?

W Pythonie byłoby coś jak

A=[i/50 for i in range(50)] 
+2

Można znaleźć http://www.scipy.org/NumPy_for_Matlab_Users użyteczne. Zauważ, że w Numpy prawdopodobnie zrobiłbym "A = np.arange (50)/50.0" zamiast rozumienia ze względu na szybkość. – mtrw

+0

@mtrw Świetny link. Dzięki –

Odpowiedz

10

Matlab bardzo lubi „Wektoryzacja” . Możesz napisać swój przykład jako:

A = (0:49) ./ 50 

Matlab nienawidzi pętli, a tym samym rozumienia list. Powiedziawszy to, spójrz na funkcję arrayfun.

+2

MATLAB * nienawidzi * pętli? Nie sądzę. Po prostu zapewnia inne sposoby robienia rzeczy. W rezultacie * ty * ostatecznie w końcu je nienawidzisz. – ktdrv

+1

Kończę nienawidzę pisać pętle w MATLAB, a nie pętle w ogóle. Ja i moja MATLAB przebrnęliśmy przez wiele ... jeśli oprogramowanie mogłoby mieć jakąkolwiek empatię, to teraz nienawidzi również pętli. –

+0

Warto zauważyć, że jest to obszar, w którym matlab i python są podobne. Python również jest wolny w pętli (w porównaniu do języków kompilowanych, takich jak C), i powinieneś próbować wektoryzacji, jeśli to możliwe w pythonie, jeśli czas obliczeń jest ważny, zwykle używając numpy. – Caleb

2

Nie, Matlab nie posiada listowych. Naprawdę nie trzeba go, jak należy skupić się na obliczeniach tablica szczebla:

A = (1:50)/50 
-1

Matlab może pracować z tablicami bezpośrednio, dzięki czemu lista zrozumienie mniej użyteczne

0

Jeśli to, co starasz się zrobić to tak trywialne jak próbki, można po prostu zrobić skalarne przepaści:

A = (0:50) ./ 50 
5

można zrobić:

(1:50)/50 

Albo czegoś bardziej ogólnego można zrobić:

[email protected](x) (x/50); 
arrayfun(f,1:50) 
0

Istnieje kilka sposobów, aby wygenerować listę w Matlab, że idzie od 0 do 49/50 w incre mentów 1/50

A = (0:49)/50 

B = 0:1/50:49/50 

C = linspace(0,49/50,50) 

EDIT As Sam Roberts zauważył w komentarzach, mimo wszystkich tych listach powinny być równoważne, wyniki liczbowe różnią się z powodu błędów zmiennoprzecinkowych. Na przykład:

max(abs(A-B)) 
ans = 
    1.1102e-16 
+1

Żadna z tych wartości A nie jest taka sama! Spróbuj nazywać je A, B i C i porównywać je ze wszystkimi (A == B) itd. Ciekawe ćwiczenie w różnych zachowaniach okrężnicy, dwukropka i przestrzeni. Znam o Pythonie zero, ale jeśli ktoś w tym wątku byłby w stanie porównać te trzy opcje MATLAB ze zrozumieniem listy Pythona, może być użyteczny. EDYCJA: usunięto moje -1, nie chciałem brzmieć krytycznie, to była dobra odpowiedź. –

+0

@SamRoberts: To bardzo dobry punkt. Chociaż teoretycznie wszystkie rozwiązania powinny być równoważne, ich wyniki nie są identyczne z powodu błędów zmiennoprzecinkowych. – Jonas

+0

Po to, aby ludzie zrozumieli mój poprzedni komentarz - @ Jonas pierwotnie nazwał wszystkie swoje zmienne A, B i C tylko A.Po jego edycji jego odpowiedź jest teraz jaśniejsza, ale mój komentarz ma mniej sensu ... –

Powiązane problemy