{"id":831,"date":"2010-10-05T21:10:48","date_gmt":"2010-10-05T20:10:48","guid":{"rendered":"http:\/\/morony.pl\/?p=831"},"modified":"2010-10-05T21:10:48","modified_gmt":"2010-10-05T20:10:48","slug":"matlab-uwaga-na-wydajnosc-funkcji","status":"publish","type":"post","link":"https:\/\/morony.pl\/?p=831","title":{"rendered":"Matlab &#8211; uwaga na wydajno\u015b\u0107 funkcji"},"content":{"rendered":"<p>We\u017amy pod uwag\u0119 prosty przyk\u0142ad. Nasz program wymaga\u00a0wielokrotnych\u00a0konwersji z uk\u0142adu wsp\u00f3\u0142rz\u0119dnych kartezja\u0144skich na biegunowe. \u00a0Za\u0142\u00f3\u017cmy, \u017ce konwersja jest dokonywana w p\u0119tli (na przyk\u0142ad dlatego, \u017ce ka\u017cdy nast\u0119pny krok zale\u017cy od poprzedniego).<\/p>\n<p>Matlab ma wbudowan\u0105 funkcj\u0119:<\/p>\n<pre class=\"prettyprint\">[THETA,RHO] = cart2pol(X,Y);<\/pre>\n<p>Do testowania wydajno\u015bci przygotujemy sobie zbi\u00f3r danych wej\u015bciowych:<\/p>\n<pre class=\"prettyprint\">v = randn(1000000,2)*1000;<\/pre>\n<p>Teraz dla ka\u017cdej pary warto\u015bci (x, y) ze zmiennej v przeliczmy wsp\u00f3\u0142rz\u0119dne:<\/p>\n<pre class=\"prettyprint\">for a = 1:length(v)\r\n    [t r] = cart2pol(v(a,1),v(a,2));\r\nend<\/pre>\n<p>Wykonanie powy\u017cszej p\u0119tli zajmuje na moim komputerze 11.692266 sekund.<\/p>\n<p>Przeanalizujmy co robi funkcja cart2pol:<\/p>\n<pre class=\"prettyprint\">function [th,r,z] = cart2pol(x,y,z)\r\nth = atan2(y,x); \r\nr = hypot(x,y); \r\nend<\/pre>\n<p>O ile atan2 jest operacj\u0105 matematyczn\u0105, to hypot jest kolejn\u0105 funkcj\u0105, kt\u00f3ra zwraca pierwiastek sumy kwadrat\u00f3w dw\u00f3ch argument\u00f3w.<\/p>\n<p>Co si\u0119 zatem stanie je\u015bli wykonamy p\u0119tle z przyk\u0142adu wy\u017cej, ale zamiast funkcji cart2pol wywo\u0142amy obliczenia bezpo\u015brednio?<\/p>\n<pre class=\"prettyprint\">for a = 1:length(v)\r\n    t = atan2(v(a,2),v(a,1));\r\n    r = sqrt(v(a,1)^2+v(a,2)^2);\r\nend<\/pre>\n<p>Efekt jest identyczny. R\u00f3\u017cnica polega na tym, \u017ce czas obliczenia zosta\u0142 zredukowany do 0.329579 sekundy, co daje przyspieszenie ponad 36 razy&#8230;<\/p>\n<p>Wniosek &#8211; kod w matlabie warto analizowa\u0107 i optymalizowa\u0107!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We\u017amy pod uwag\u0119 prosty przyk\u0142ad. Nasz program wymaga\u00a0wielokrotnych\u00a0konwersji z uk\u0142adu wsp\u00f3\u0142rz\u0119dnych kartezja\u0144skich na biegunowe. \u00a0Za\u0142\u00f3\u017cmy, \u017ce konwersja jest dokonywana w p\u0119tli (na przyk\u0142ad dlatego, \u017ce ka\u017cdy nast\u0119pny krok zale\u017cy od poprzedniego). Matlab ma wbudowan\u0105 funkcj\u0119: [THETA,RHO] = cart2pol(X,Y); Do testowania wydajno\u015bci przygotujemy sobie zbi\u00f3r danych wej\u015bciowych: v = randn(1000000,2)*1000; Teraz dla ka\u017cdej pary warto\u015bci (x, [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"_links":{"self":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/831"}],"collection":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=831"}],"version-history":[{"count":5,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/831\/revisions"}],"predecessor-version":[{"id":836,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/831\/revisions\/836"}],"wp:attachment":[{"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}