{"id":544,"date":"2020-12-28T18:45:58","date_gmt":"2020-12-28T18:45:58","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/?post_type=chapter&#038;p=544"},"modified":"2020-12-28T18:56:37","modified_gmt":"2020-12-28T18:56:37","slug":"funktsioonide-kasutamine-numpy-kahemootmeliste-jarjenditega","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/funktsioonide-kasutamine-numpy-kahemootmeliste-jarjenditega\/","title":{"raw":"Funktsioonide kasutamine NumPy kahem\u00f5\u00f5tmeliste j\u00e4rjenditega","rendered":"Funktsioonide kasutamine NumPy kahem\u00f5\u00f5tmeliste j\u00e4rjenditega"},"content":{"raw":"<h2>Aritmeetiline keskmine<\/h2>\r\nKahem\u00f5\u00f5tmeliste j\u00e4rjendite puhul on sageli vaja leida iga rea v\u00f5i veeru aritmeetiline keskmine. Selleks saab kasutada <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">mean<\/code> funktsiooni, kuid t\u00e4psustama peab, kas aritmeetilisi keskmisi soovitakse leida ridadele v\u00f5i veergudele. Lisada tuleb juurde parameeter <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">axis<\/code> ja v\u00e4\u00e4rtustada see kas 1-ga (read) v\u00f5i 0-ga (veerud). Tulemuseks on \u00fchem\u00f5\u00f5tmeline j\u00e4rjend vastavate keskmistega.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">b = np.array([[1, 2, 3, 4],\r\n[5, 6, 7, 8],\r\n[1, 6, 3, 7],\r\n[1, 6, 7, 2],\r\n[5, 7, 3, 2]])\r\n\r\n\r\nkeskmine_read = np.mean(b, axis=1)\r\nkeskmine_veerud = np.mean(b, axis=0)\r\n\r\nprint(\"Ridade aritmeetilised keskmised:\", keskmine_read)\r\nprint(\"Veergude aritmeetilised keskmised\", keskmine_veerud)\r\n\r\n<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n\u00a0 Ridade aritmeetilised keskmised: [2.5\u00a0 6.5\u00a0 4.25 4. \u00a0 4.25]\r\n\u00a0 Veergude aritmeetilised keskmised [2.6 5.4 4.6 4.6]<\/pre>\r\n<h2>Oma funktsiooni kasutamine<\/h2>\r\nKa kahem\u00f5\u00f5tmeliste j\u00e4rjendite peal on v\u00f5imalik kasutada kasutaja loodud funktsioone. N\u00e4iteks soovime k\u00f5ikidel j\u00e4rjendi elementidel rakendada j\u00e4rgmist valemit.\r\n<pre>element**2 + element * 5 - 1<\/pre>\r\nSelleks defineerime vastava funktsiooni\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">def arvuta(lst):\r\n    return lst**2 + lst * 5 - 1<\/pre>\r\nJ\u00e4rgnevalt rakendame funktsiooni j\u00e4rjendi peal.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">b = np.array([[1, 2, 3, 4],\r\n[5, 6, 7, 8],\r\n[1, 6, 3, 7],\r\n[1, 6, 7, 2],\r\n[5, 7, 3, 2]])\r\n\r\nc = arvuta(b)\r\n\r\nprint(c)<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n\u00a0 [[\u00a0 5\u00a0 13\u00a0 23\u00a0 35]\r\n   [ 49\u00a0 65\u00a0 83 103]\r\n   [\u00a0 5\u00a0 65\u00a0 23\u00a0 83]\r\n   [\u00a0 5\u00a0 65\u00a0 83\u00a0 13]\r\n   [ 49\u00a0 83\u00a0 23\u00a0 13]]<\/pre>\r\nN\u00fc\u00fcd aga rakendame funktsiooni tabeli igal real v\u00f5i veerul. Selleks kasutame <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">apply_along_axis<\/code> funktsiooni, mis v\u00f5imaldab kasutaja defineeritud funktsioone rakendada tabeli igal real v\u00f5i veerul. <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">apply_along_axis<\/code> argumentideks tuleb anda oma <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">funktsiooni nimi<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">suund<\/code> (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">1<\/code> - read, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">0<\/code> - veerud) ja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">j\u00e4rjendi nimi<\/code>. Tulemuseks on \u00fchem\u00f5\u00f5tmeline j\u00e4rjend vastavate rea v\u00f5i veeru v\u00e4\u00e4rtustega.\r\n\r\n<span style=\"background-color: #f1c232\">\u00a0! <\/span><span style=\"background-color: #fff5bd\">\u00a0Defineeritud funktsiooni argumendiks peab olema \u00fchem\u00f5\u00f5tmeline j\u00e4rjend.\u00a0<\/span>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">def summa(lst):\r\n    return np.sum(lst) * 11 - 5\r\n\r\nb = np.array([[1, 2, 3, 4],\r\n[5, 6, 7, 8],\r\n[1, 6, 3, 7]])\r\n\r\n\r\narvuta_read = np.apply_along_axis(summa, 1, b)\r\narvuta_veerud = np.apply_along_axis(summa, 0, b)\r\n\r\nprint(\"Read:\", arvuta_read)\r\nprint(\"Veerud\", arvuta_veerud)<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n \u00a0Read: [105 281 182]\r\n\u00a0\u00a0Veerud [ 72 149 138 204]<\/pre>\r\n&nbsp;\r\n\r\nLisame arvutatud veeru tabelisse. Kuna soovime lisada kahem\u00f5\u00f5tmelisele j\u00e4rjendile juurde \u00fchem\u00f5\u00f5tmelise j\u00e4rjendi, siis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">appendi<\/code> siin kasutada ei saa. Selleks on olemas NumPy funktsioon <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">column_stack<\/code>, mille argument on ennik. Enniku esimene element on kahem\u00f5\u00f5tmeline j\u00e4rjend, kuhu soovitakse veerg lisada, ja teine element on \u00fchem\u00f5\u00f5tmeline j\u00e4rjend, mida lisatakse.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">def summa(lst):\r\n    return np.sum(lst) * 11 - 5\r\n\r\nb = np.array([[1, 2, 3, 4],\r\n[5, 6, 7, 8],\r\n[1, 6, 3, 7]])\r\n\r\n\r\narvuta_read = np.apply_along_axis(summa, 1, b)\r\nc = np.column_stack((b, arvuta_read))\r\n\r\n\r\n\r\nprint(\"Uue veeruga j\u00e4rjend: \", c)<\/pre>\r\n&nbsp;\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n \u00a0Uue veeruga j\u00e4rjend:\u00a0 [[\u00a0 1 \u00a0 2 \u00a0 3 \u00a0 4 105]\r\n \u00a0\u00a0[\u00a0 5 \u00a0 6 \u00a0 7 \u00a0 8 281]\r\n\u00a0\u00a0\u00a0[\u00a0 1 \u00a0 6 \u00a0 3 \u00a0 7 182]]<\/pre>\r\n&nbsp;\r\n\r\nSarnaselt saab kasutada ka <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">row_stack<\/code> funktsiooni rea lisamiseks.","rendered":"<h2>Aritmeetiline keskmine<\/h2>\n<p>Kahem\u00f5\u00f5tmeliste j\u00e4rjendite puhul on sageli vaja leida iga rea v\u00f5i veeru aritmeetiline keskmine. Selleks saab kasutada <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">mean<\/code> funktsiooni, kuid t\u00e4psustama peab, kas aritmeetilisi keskmisi soovitakse leida ridadele v\u00f5i veergudele. Lisada tuleb juurde parameeter <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">axis<\/code> ja v\u00e4\u00e4rtustada see kas 1-ga (read) v\u00f5i 0-ga (veerud). Tulemuseks on \u00fchem\u00f5\u00f5tmeline j\u00e4rjend vastavate keskmistega.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">b = np.array([[1, 2, 3, 4],\r\n[5, 6, 7, 8],\r\n[1, 6, 3, 7],\r\n[1, 6, 7, 2],\r\n[5, 7, 3, 2]])\r\n\r\n\r\nkeskmine_read = np.mean(b, axis=1)\r\nkeskmine_veerud = np.mean(b, axis=0)\r\n\r\nprint(\"Ridade aritmeetilised keskmised:\", keskmine_read)\r\nprint(\"Veergude aritmeetilised keskmised\", keskmine_veerud)\r\n\r\n<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n\u00a0 Ridade aritmeetilised keskmised: [2.5\u00a0 6.5\u00a0 4.25 4. \u00a0 4.25]\r\n\u00a0 Veergude aritmeetilised keskmised [2.6 5.4 4.6 4.6]<\/pre>\n<h2>Oma funktsiooni kasutamine<\/h2>\n<p>Ka kahem\u00f5\u00f5tmeliste j\u00e4rjendite peal on v\u00f5imalik kasutada kasutaja loodud funktsioone. N\u00e4iteks soovime k\u00f5ikidel j\u00e4rjendi elementidel rakendada j\u00e4rgmist valemit.<\/p>\n<pre>element**2 + element * 5 - 1<\/pre>\n<p>Selleks defineerime vastava funktsiooni<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">def arvuta(lst):\r\n    return lst**2 + lst * 5 - 1<\/pre>\n<p>J\u00e4rgnevalt rakendame funktsiooni j\u00e4rjendi peal.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">b = np.array([[1, 2, 3, 4],\r\n[5, 6, 7, 8],\r\n[1, 6, 3, 7],\r\n[1, 6, 7, 2],\r\n[5, 7, 3, 2]])\r\n\r\nc = arvuta(b)\r\n\r\nprint(c)<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n\u00a0 [[\u00a0 5\u00a0 13\u00a0 23\u00a0 35]\r\n   [ 49\u00a0 65\u00a0 83 103]\r\n   [\u00a0 5\u00a0 65\u00a0 23\u00a0 83]\r\n   [\u00a0 5\u00a0 65\u00a0 83\u00a0 13]\r\n   [ 49\u00a0 83\u00a0 23\u00a0 13]]<\/pre>\n<p>N\u00fc\u00fcd aga rakendame funktsiooni tabeli igal real v\u00f5i veerul. Selleks kasutame <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">apply_along_axis<\/code> funktsiooni, mis v\u00f5imaldab kasutaja defineeritud funktsioone rakendada tabeli igal real v\u00f5i veerul. <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">apply_along_axis<\/code> argumentideks tuleb anda oma <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">funktsiooni nimi<\/code>, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">suund<\/code> (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">1<\/code> &#8211; read, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">0<\/code> &#8211; veerud) ja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">j\u00e4rjendi nimi<\/code>. Tulemuseks on \u00fchem\u00f5\u00f5tmeline j\u00e4rjend vastavate rea v\u00f5i veeru v\u00e4\u00e4rtustega.<\/p>\n<p><span style=\"background-color: #f1c232\">\u00a0! <\/span><span style=\"background-color: #fff5bd\">\u00a0Defineeritud funktsiooni argumendiks peab olema \u00fchem\u00f5\u00f5tmeline j\u00e4rjend.\u00a0<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">def summa(lst):\r\n    return np.sum(lst) * 11 - 5\r\n\r\nb = np.array([[1, 2, 3, 4],\r\n[5, 6, 7, 8],\r\n[1, 6, 3, 7]])\r\n\r\n\r\narvuta_read = np.apply_along_axis(summa, 1, b)\r\narvuta_veerud = np.apply_along_axis(summa, 0, b)\r\n\r\nprint(\"Read:\", arvuta_read)\r\nprint(\"Veerud\", arvuta_veerud)<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n \u00a0Read: [105 281 182]\r\n\u00a0\u00a0Veerud [ 72 149 138 204]<\/pre>\n<p>&nbsp;<\/p>\n<p>Lisame arvutatud veeru tabelisse. Kuna soovime lisada kahem\u00f5\u00f5tmelisele j\u00e4rjendile juurde \u00fchem\u00f5\u00f5tmelise j\u00e4rjendi, siis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">appendi<\/code> siin kasutada ei saa. Selleks on olemas NumPy funktsioon <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">column_stack<\/code>, mille argument on ennik. Enniku esimene element on kahem\u00f5\u00f5tmeline j\u00e4rjend, kuhu soovitakse veerg lisada, ja teine element on \u00fchem\u00f5\u00f5tmeline j\u00e4rjend, mida lisatakse.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">def summa(lst):\r\n    return np.sum(lst) * 11 - 5\r\n\r\nb = np.array([[1, 2, 3, 4],\r\n[5, 6, 7, 8],\r\n[1, 6, 3, 7]])\r\n\r\n\r\narvuta_read = np.apply_along_axis(summa, 1, b)\r\nc = np.column_stack((b, arvuta_read))\r\n\r\n\r\n\r\nprint(\"Uue veeruga j\u00e4rjend: \", c)<\/pre>\n<p>&nbsp;<\/p>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n \u00a0Uue veeruga j\u00e4rjend:\u00a0 [[\u00a0 1 \u00a0 2 \u00a0 3 \u00a0 4 105]\r\n \u00a0\u00a0[\u00a0 5 \u00a0 6 \u00a0 7 \u00a0 8 281]\r\n\u00a0\u00a0\u00a0[\u00a0 1 \u00a0 6 \u00a0 3 \u00a0 7 182]]<\/pre>\n<p>&nbsp;<\/p>\n<p>Sarnaselt saab kasutada ka <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">row_stack<\/code> funktsiooni rea lisamiseks.<\/p>\n","protected":false},"author":16,"menu_order":9,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-544","chapter","type-chapter","status-publish","hentry"],"part":90,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/users\/16"}],"version-history":[{"count":3,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/544\/revisions"}],"predecessor-version":[{"id":546,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/544\/revisions\/546"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/parts\/90"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/544\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/media?parent=544"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapter-type?post=544"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/contributor?post=544"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/license?post=544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}