Wprowadzenie do wektoryzacji w MATLAB-jakieś dobre tutoriale? [zamknięte]

Zamknięte. to pytanie nie spełnia wytycznych dotyczących przepełnienia stosu . Obecnie nie przyjmuje odpowiedzi.


Chcesz poprawić to pytanie? Update the pytanie więc to on-topic {[5] } dla przepełnienia stosu.

Zamknięte 6 lat temu .

Popraw to pytanie

Szukam dobrych tutoriali na temat wektoryzacji (pętli) w MATLAB.

Mam dość prosty algorytm, ale wykorzystuje on dwie pętle for. Wiem, że wektoryzacja powinna być prosta i chciałbym się dowiedzieć, jak to zrobić, zamiast prosić Cię o rozwiązanie.

Ale aby dać Ci znać, jaki mam problem, abyś mógł zasugerować najlepsze tutoriale, które pokazują, jak rozwiązać podobne problemy, oto zarys mojego problemu: {]}

B = zeros(size(A));    % //A is a given matrix.
for i=1:size(A,1)
   for j=1:size(A,2)
      H = ... %// take some surrounding elements of the element at position (i,j) (i.e. using mask 3x3 elements)
      B(i,j) = computeSth(H); %// compute something on selected elements and place it in B
   end
end
Więc nie proszę o rozwiązanie. Proszę o dobre tutoriale, przykłady pętli wektoryzacji w Matlabie. Chciałbym się nauczyć jak to robić i robić to na własną rękę.
Author: Gacek, 2010-05-19

3 answers

Oto kilka samouczków MathWorks, do których często linkuję jako odniesienia na ten temat:

A oto jeden z postów Loren na blogu, który ma ładny przegląd wektoryzacji kodu dla konkretnego przykładowego problemu:

Szczególny rodzaj problemu podałeś jako próbkę, która polega na przetwarzaniu submatrices danej macierzy, może być wektoryzowany na różne sposoby w zależności od tego, jakiego rodzaju operacji wykonujesz. Możesz używać CONV2 lub FILTER2 zamiast zagnieżdżonych pętli for. Istnieje również szereg funkcji w Image Processing Toolbox, które obsługują sąsiedztwo i przetwarzanie bloków macierzy, takich jak NLFILTER i BLOCKPROC. Dokumentacja tych funkcji powinna pomóc wymyślisz, jak użyć ich jako sposobu na wektoryzację kodu.

 8
Author: gnovice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-19 18:04:16

Jest mały writeup, który zrobiłem rok temu, aby wyjaśnić sztuczkę, którą znalazłem po spędzeniu 3 lat na pisaniu kodu Matlab codziennie, często spędzając zbyt dużo czasu na wektoryzowaniu wszystkiego.

Http://www.gyomalin.com/reasonable_vectorization.html

Główną ideą jest to, że możesz przejść długą drogę przez wektoryzację kodu wzdłuż jednego wymiaru. Niektórzy z Was może już odkryli tę sztuczkę, ale myślę, że warto nazwać ją wzorcem projektowym Matlab.

 3
Author: gyom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-26 20:27:53

Zasada jest taka, że powinieneś używać wbudowanych funkcji matlab, które działają na tablicach zamiast pętli, o ile to możliwe. Na przykład, wydaje mi się, że problem, który opisałeś, może być sformułowany jako splot, a następnie możesz użyć funkcji conv2() LUB filter() matlab, aby zaimplementować go bez pętli.

Inną ogólną sztuczką jest próba sformułowania problemu w kategoriach operacji macierzy.

Powinieneś również preferować przestrzeń handlową na czas. Powiedzmy, że ty mają wektor n-wymiarowy v i macierz m x n M, gdzie każdy rząd jest również wektorem n-wymiarowym. Powiedzmy, że chcesz odległości Euklidesowe między v A każdym rzędem M. W tym przypadku należy użyć repmat(), aby utworzyć macierz zawierającą m kopii v i obliczyć odległości za pomocą operacji tablicowych bez pętli.

 1
Author: Dima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-19 17:40:27