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)]
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)]
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
.
MATLAB * nienawidzi * pętli? Nie sądzę. Po prostu zapewnia inne sposoby robienia rzeczy. W rezultacie * ty * ostatecznie w końcu je nienawidzisz. – ktdrv
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. –
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
Nie, Matlab nie posiada listowych. Naprawdę nie trzeba go, jak należy skupić się na obliczeniach tablica szczebla:
A = (1:50)/50
Matlab może pracować z tablicami bezpośrednio, dzięki czemu lista zrozumienie mniej użyteczne
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
można zrobić:
(1:50)/50
Albo czegoś bardziej ogólnego można zrobić:
[email protected](x) (x/50);
arrayfun(f,1:50)
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
Ż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ź. –
@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
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 ... –
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
@mtrw Świetny link. Dzięki –