2008-09-08 4 views

Odpowiedz

5

Jeśli się nie mylę, funkcja zip używana w pythonie creates a pair of the items found in list1 and list2. Zasadniczo wciąż jest to pętla for z dodatkiem, że pobierze dane z dwóch oddzielnych list dla ciebie, zamiast tego musisz to zrobić samodzielnie.

Więc może najlepszym rozwiązaniem jest użycie standardowego pętli tak:

for i=1:length(a) 
    c(i) = a(i) + b(i); 
end 

lub co trzeba zrobić z danymi.

Jeśli naprawdę mówimy o obliczeniach równoległych, to powinieneś zapoznać się z Parallel Computing Toolbox dla Matlab, a dokładniej w parfor

3

testowany tylko w oktawie ... (licencja nr Matlab). Istnieją wariacje arrayfun(), sprawdź dokumentację.

#!/usr/bin/octave -qf 

function result = dostuff(my_ten, my_one) 
    result = my_ten + my_one 
endfunction 

tens = [ 10 20 30 ]; 
ones = [ 1 2 3]; 

x = arrayfun(@dostuff, tens, ones); 

x 

Plony ...

x = 

    11 22 33 
13

Jeśli x i y są wektory kolumnowe, można zrobić:

for i=[x';y'] 
# do stuff with i(1) and i(2) 
end 

(wektorami rzędowych, wystarczy użyć x i y).

Oto przykład run:

>> x=[1 ; 2; 3;] 

x = 

    1 
    2 
    3 

>> y=[10 ; 20; 30;] 

y = 

    10 
    20 
    30 

>> for i=[x';y'] 
disp(['size of i = ' num2str(size(i)) ', i(1) = ' num2str(i(1)) ', i(2) = ' num2str(i(2))]) 
end 
size of i = 2 1, i(1) = 1, i(2) = 10 
size of i = 2 1, i(1) = 2, i(2) = 20 
size of i = 2 1, i(1) = 3, i(2) = 30 
>> 
+0

Tak więc skompresowanie listy z '(+)' i przypisanie wyniku do 'foo' będzie wyglądało' dla i = [[1,2]; [3,4]] horzcat (foo, i (1) + i (2)) koniec ". Jak okropnie D: Im więcej w tym nurkuję * (z powodu zadania Coursera) *, tym bardziej jestem zaskoczony, jak niezręczny Matlab jest do obliczeń matematycznych. Spodziewałem się czegoś podobnego do Haskella z zmiennością, okazuje się, że absolutnie nie jest. –

-2

for pętle w Matlab kiedyś powolny, ale nie jest to już prawdą.

Więc wektoryzacja nie zawsze jest cudownym rozwiązaniem. Po prostu użyj funkcji profilera i funkcji tic i toc, aby ułatwić identyfikację potencjalnych wąskich gardeł.

+1

powinno być "tic" i "toc" ... –

+1

z mojego doświadczenia "arrayfun" jest * dużo * wolniejsze niż "dla", na przykład –

+1

Arrayfun nie jest wektoryzacją, to tylko fantazyjnie wyglądająca pętla. – Daniel

1

Polecam połączyć dwie tablice do obliczeń:

% assuming you have column vectors a and b 
x = [a b]; 

for i = 1:length(a) 
    % do stuff with one row... 
    x(i,:); 
end 

to będzie działać świetnie, jeśli funkcje mogą pracować z wektorów. Z drugiej strony, wiele funkcji może pracować z macierzami, więc nie potrzebujesz nawet pętli.

Powiązane problemy