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 pytanieSzukam 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ę. 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.
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.
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.
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