<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FMatplotlib_%2B_numpy</id>
	<title>TI/Matplotlib + numpy - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FMatplotlib_%2B_numpy"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Matplotlib_%2B_numpy&amp;action=history"/>
	<updated>2026-04-13T09:04:24Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Matplotlib_%2B_numpy&amp;diff=1781&amp;oldid=prev</id>
		<title>Jarekz: /* Zadanie 2 */</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Matplotlib_%2B_numpy&amp;diff=1781&amp;oldid=prev"/>
		<updated>2015-05-23T09:46:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Zadanie 2&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Wersja z 09:46, 23 maj 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l540&quot; &gt;Linia 540:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 540:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Zadanie 2====  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Zadanie 2====  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Przepisz operacje zachodzące w pętlach i funkcjach w [[TI&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;:&lt;/del&gt;Matplotlib_%2B_numpy#Dopasowanie_metod.C4.85_najmniejsztch_kwadrat.C3.B3w|zadaniu z dopasowaniem metodą najmniejszych kwadratów]] tak, żeby skorzystać z operacji macierzowych.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Przepisz operacje zachodzące w pętlach i funkcjach w [[TI&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;/&lt;/ins&gt;Matplotlib_%2B_numpy#Dopasowanie_metod.C4.85_najmniejsztch_kwadrat.C3.B3w|zadaniu z dopasowaniem metodą najmniejszych kwadratów]] tak, żeby skorzystać z operacji macierzowych.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Żeby znaleźć najmniejszą wartość w macierzy z kwadratami residuów skorzystaj z metody &amp;lt;tt&amp;gt;min()&amp;lt;/tt&amp;gt; strunktury &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt;. Żeby uzyskać spłaszczony indeks tego elementu skorzystaj z metody &amp;lt;tt&amp;gt;argmin()&amp;lt;/tt&amp;gt; strunktury &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt; i następnie z funkcji [http://docs.scipy.org/doc/numpy/reference/generated/numpy.unravel_index.html#numpy.unravel_index &amp;lt;tt&amp;gt;numpy.unravel_index(indices, dims, order='C')&amp;lt;/tt&amp;gt;], żeby znaleźć wartości parametrów, które minimalizują sumę kwadratów residuów.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Żeby znaleźć najmniejszą wartość w macierzy z kwadratami residuów skorzystaj z metody &amp;lt;tt&amp;gt;min()&amp;lt;/tt&amp;gt; strunktury &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt;. Żeby uzyskać spłaszczony indeks tego elementu skorzystaj z metody &amp;lt;tt&amp;gt;argmin()&amp;lt;/tt&amp;gt; strunktury &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt; i następnie z funkcji [http://docs.scipy.org/doc/numpy/reference/generated/numpy.unravel_index.html#numpy.unravel_index &amp;lt;tt&amp;gt;numpy.unravel_index(indices, dims, order='C')&amp;lt;/tt&amp;gt;], żeby znaleźć wartości parametrów, które minimalizują sumę kwadratów residuów.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Deklarowanie własnych typów danych===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Deklarowanie własnych typów danych===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Matplotlib_%2B_numpy&amp;diff=1772&amp;oldid=prev</id>
		<title>Jarekz: /* Wycinki */</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Matplotlib_%2B_numpy&amp;diff=1772&amp;oldid=prev"/>
		<updated>2015-05-23T09:32:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Wycinki&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Wersja z 09:32, 23 maj 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l163&quot; &gt;Linia 163:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 163:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Taka konwencja ma pewne zalety, w szczególności dla dowolnego indeksu &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; prawdą jest, że&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Taka konwencja ma pewne zalety, w szczególności dla dowolnego indeksu &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; prawdą jest, że&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;'py'&lt;/del&gt;&amp;gt;sekwencja[:a] + sekwencja[a:] == sekwencja&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang= &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;python&lt;/ins&gt;&amp;gt;sekwencja[:a] + sekwencja[a:] == sekwencja&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Konstruując wycinek możemy pobierać co ''n''-ty element napisu. Robi się to podając wartość kroku ''n'' po kolejnym dwukropku. Domyślnie ''n'' ma wartość 1.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Konstruując wycinek możemy pobierać co ''n''-ty element napisu. Robi się to podając wartość kroku ''n'' po kolejnym dwukropku. Domyślnie ''n'' ma wartość 1.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l188&quot; &gt;Linia 188:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 188:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/tt&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/tt&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Numery wskazujące na miejsca poza rozmiarem napisu nie są błędne, Python wybierze tylko istniejące znaki.  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Numery wskazujące na miejsca poza rozmiarem napisu nie są błędne, Python wybierze tylko istniejące znaki.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Numpy ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Numpy ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Matplotlib_%2B_numpy&amp;diff=1771&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot; Krótkie wprowadzenie do biblioteki NumPy pojawiło się już w zeszłym roku. ==Wycinki== &lt;noinclude&gt;Fragment z http://en.wikiboo...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Matplotlib_%2B_numpy&amp;diff=1771&amp;oldid=prev"/>
		<updated>2015-05-23T09:29:28Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot; Krótkie wprowadzenie do biblioteki NumPy pojawiło się już w &lt;a href=&quot;/edu/index.php?title=TI/Programowanie_z_Pythonem/Numpy&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;TI/Programowanie z Pythonem/Numpy (strona nie istnieje)&quot;&gt;zeszłym roku&lt;/a&gt;. ==Wycinki== &amp;lt;noinclude&amp;gt;Fragment z http://en.wikiboo...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
Krótkie wprowadzenie do biblioteki NumPy pojawiło się już w [[TI/Programowanie_z_Pythonem/Numpy|zeszłym roku]].&lt;br /&gt;
==Wycinki==&lt;br /&gt;
&amp;lt;noinclude&amp;gt;Fragment z&lt;br /&gt;
http://en.wikibooks.org/wiki/Non-Programmer%27s_Tutorial_for_Python_2.0/Revenge_of_the_Strings, autorstwa [[wikibooksen:User:Jrincayc]], [[wikibooksen:User:Whiteknight]], [[wikibooksen:User:Siebengang]], [[wikibooksen:User:33rogers]].&amp;lt;br&amp;gt;&lt;br /&gt;
Z poprawkami!&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Indeksy ====&lt;br /&gt;
&lt;br /&gt;
Indeksując napis odwołujemy się do wybranego znaku. Znaki mogą być liczone od początku napisu (pierwszy ma numer 0) lub od jego końca (ostatni ma numer –1).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:center&amp;quot; cellspacing=&amp;quot;0px&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:red&amp;quot; |0&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:red&amp;quot; |1&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:red&amp;quot; |2&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; | ...&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:blue&amp;quot; | –2&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width:2ex;color:blue&amp;quot; | –1&lt;br /&gt;
| style=&amp;quot;width:2ex&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;darr;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| tekst = &lt;br /&gt;
|&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#FFFF88&amp;quot; | S&lt;br /&gt;
! &lt;br /&gt;
! style=&amp;quot;background:#FFFF88&amp;quot; | T&lt;br /&gt;
!&lt;br /&gt;
! style=&amp;quot;background:#FFFF88&amp;quot; | R&lt;br /&gt;
!&lt;br /&gt;
! style=&amp;quot;background:#FFFF88&amp;quot; | I&lt;br /&gt;
!&lt;br /&gt;
! style=&amp;quot;background:#FFFF88&amp;quot; | N&lt;br /&gt;
!&lt;br /&gt;
! style=&amp;quot;background:#FFFF88&amp;quot; | G&lt;br /&gt;
|&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;uarr;&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
| style=&amp;quot;background:#FFFF88&amp;quot; |&amp;amp;uarr;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na powyższym rysunku &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;czerwone&amp;lt;/span&amp;gt; indeksy są liczone od początku napisu, a &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;niebieskie&amp;lt;/span&amp;gt; od jego końca.&lt;br /&gt;
&lt;br /&gt;
Teraz przykłady&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|tekst[0] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;S&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekst[1] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;T&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekst[2] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;R&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekst[&amp;amp;minus;2] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;N&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekst[&amp;amp;minus;0] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;S&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekst[20] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || {{color|red|IndexError&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nie ma indeksu &amp;amp;minus;0, bo w Pythonie &amp;lt;tt&amp;gt;&amp;amp;minus;0 == 0&amp;lt;/tt&amp;gt;, więc &amp;amp;minus;0 również wskazuje na początek napisu. &lt;br /&gt;
&lt;br /&gt;
Numery wskazujące na miejsca poza końcem napisu lub przed jego początkiem są błędne, Python zwróci informację o błędzie, tzw. &amp;lt;tt&amp;gt;IndexError&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Przykład &amp;amp;mdash; indeksy dla napisu &amp;quot;string&amp;quot;====&lt;br /&gt;
=====Indeksy dodatnie=====&lt;br /&gt;
&amp;lt;source lang = &amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[0]&lt;br /&gt;
's'&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[1]&lt;br /&gt;
't'&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[2]&lt;br /&gt;
'r'&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[3]&lt;br /&gt;
'i'&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[4]&lt;br /&gt;
'n'&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[5]&lt;br /&gt;
'g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=====Indeksy ujemne=====&lt;br /&gt;
&amp;lt;source lang = &amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst = &amp;quot;string&amp;quot;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[-1]&lt;br /&gt;
'g'&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[-2]&lt;br /&gt;
'n'&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[-3]&lt;br /&gt;
'i'&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[-5]&lt;br /&gt;
't'&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[-4]&lt;br /&gt;
'r'&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[-5]&lt;br /&gt;
't'&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; tekst[-6]&lt;br /&gt;
's'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== Wycinki ====&lt;br /&gt;
&lt;br /&gt;
Pobranie wycinka sekwencji polega na wybraniu jej fragmentu &amp;amp;mdash; podsekwencji.&lt;br /&gt;
Miejsca początku i końca zakresu z którego pobieramy wycinek liczone są podobnie jak przypadku indeksowania. Istotna różnica jest taka, że wskazujemy podsekwencję, a nie pojedynczy element &amp;amp;mdash; i to w sposób szczególny. '''Przedział który wskazujemy jako &amp;lt;tt&amp;gt;[a:b]&amp;lt;/tt&amp;gt;, jest zamknięty od strony &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt;, a otwarty od strony &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt;.'''&lt;br /&gt;
&amp;lt;!-- piszę: od strony a, od strony b, zamiast od lewej, od prawej, bo dla kroku ujemnego strony się zamieniają w przedziale, natomiast nie we wskazaniu i nastąpiłaby konfuzja. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lewy i prawy kraniec wycinka podajemy oddzielając indeksy dwukropkiem &amp;lt;tt&amp;gt;:&amp;lt;/tt&amp;gt;. Każdą z tych wartości można pominąć, w skrajnym przypadku zostawiając tylko dwukropek. Jeśli dany indeks pominiemy, zostaną użyte wartości domyślne:&lt;br /&gt;
* domyślne położenie początku wycinka to początek sekwencji&lt;br /&gt;
* domyślne położenie końca wycinka to koniec całej sekwencji&lt;br /&gt;
&lt;br /&gt;
Taka konwencja ma pewne zalety, w szczególności dla dowolnego indeksu &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; prawdą jest, że&lt;br /&gt;
&amp;lt;source lang='py'&amp;gt;sekwencja[:a] + sekwencja[a:] == sekwencja&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Konstruując wycinek możemy pobierać co ''n''-ty element napisu. Robi się to podając wartość kroku ''n'' po kolejnym dwukropku. Domyślnie ''n'' ma wartość 1.&lt;br /&gt;
&lt;br /&gt;
Teraz przykłady&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|tekst[1:4] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;TRI&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekst[:5] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;STRIN&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekst[:–1] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;STRIN&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekst[–4:] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;RING&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekst[:] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;STRING&amp;quot;  (tzw. ''pełny wycinek'', czyli kopia sekwencji)&lt;br /&gt;
|-&lt;br /&gt;
|tekst[::–1] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;GNIRTS&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|tekst[&amp;amp;minus;10:&amp;amp;minus;2] || style=&amp;quot;width:3em;text-align:center&amp;quot; | &amp;amp;rarr; || &amp;quot;STRI&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Numery wskazujące na miejsca poza rozmiarem napisu nie są błędne, Python wybierze tylko istniejące znaki. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Numpy ==&lt;br /&gt;
=== Tablice ===&lt;br /&gt;
W zeszłym roku była mowa o tablicach (arrays) w numpy. Ograniczaliśmy się praktycznie do przypadku dwuwymiarowego, czyli macierzy. Warto sobie uświadomić, że obiekt array może być wielowymiarową tablicą. Przytoczymy teraz kilka przydatnych funkcji dotyczących tablic w numpy.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
a = np.ones((2,3,4)) # tworzy tablicę jedynek o wymiarze 2x3x4 &lt;br /&gt;
a = np.empty((2,3)) # tworzy pustą tablicę o wymiarze 2x3&lt;br /&gt;
a = np.zeros((2,3,4,5)) # twrzy tablicę zer o wymiarze 2x3x4x5&lt;br /&gt;
# tak, w numpy można tworzyć więcej niż 3-wymiarowe tablice!&lt;br /&gt;
# jeśli potrzebowalibyśmy bardzo dużo wymiarów, a nie chce nam się ich po kolei wpisywać możemy zrobić tak:&lt;br /&gt;
a = np.empty(tuple([10 for i in range(20)])) # 20-sto wymiarowa tablica, w której każdy wymiar ma długość 10&lt;br /&gt;
#np.empty przyjmuje jako argument obiekt tuple, dlatego utworzyliśmy w wygodny sposób listę wymiarów, a następnie przerabiamy ją na tuple, żeby podać jako argument&lt;br /&gt;
# łatwiejszym do wyobrażenia, 3-wymiarowym odpowiednikiem tego jest:&lt;br /&gt;
a = np.empty(tuple([10 for i in range(3)])) # 3-wymiarowa tablica, w której każdy z wymiarów ma długość 10&lt;br /&gt;
A = np.random.randint(10,size = (3,3)) # wytwarza tablicę losowych elementów całkowitych o wymiarach 3x3 (takie tablicę częst się przydają jako dane testowe do naszych funkcji/programów)&lt;br /&gt;
A = np.random.randint(10,size = (3,3,5)) # wytwarza tablicę analogiczną do powyższej, ale o wymiarze 3x3x5&lt;br /&gt;
wiersze,kolumny = numpy.shape(A) # co się stanie, gdy A ma wymiar mniejszy/większy niż 2?&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Jaki będzie wynik następujących instrukcji:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = np.arange(1,10)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = np.arange(10)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = np.arange(1., 10)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = np.arange(1, 10, 2.5)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a = np.arange(1,2,10)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Utwórz 3-wymiarową tablicę A, o wymiarach 10x5x3 taką, że A[i,j,k] = &amp;quot;i,j,k&amp;quot; (wartością każdego elementu będzie string zawierający wszystkie indeksy). Aby zainicjalizować poprawnie tablicę pamiętaj o wybraniu odpowiedniego typu zmiennych (&amp;lt;tt&amp;gt;dtype&amp;lt;/tt&amp;gt;). Wypisz ją, przyjrzyj się w jakiej kolejności są wypisywane elementy, gdy napiszesz po prostu.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Utwórz 100-wymiarową tablicę zer, o każdym wymiarze = 10. Ile maksymalnie wymiarów może mieć tablica w numpy?&lt;br /&gt;
* Z listy [[1, 2, 3], [4, 5, 6],[7, 8, 9]] utwórz macierz.&lt;br /&gt;
* Zastanów się, jak zmienić swoją funkcję obliczającą splot, tak, żeby radziła sobie też z wektorami różnej długości.&lt;br /&gt;
&lt;br /&gt;
===Trochę wiadomości o tablicach w &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt;===&lt;br /&gt;
* W &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; jak i w Pythonie obowiązuje numeracja od zera &amp;amp;mdash; stąd pierwszy element wektora &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; o długości ''N'' to &amp;lt;tt&amp;gt;a[0]&amp;lt;/tt&amp;gt;, a ostatni &amp;lt;tt&amp;gt;a[N-1]&amp;lt;/tt&amp;gt;. &lt;br /&gt;
* Elementy tablicy indeksuje się: &amp;lt;math&amp;gt;A[i_0,i_1,...,i_{n-1}]&amp;lt;/math&amp;gt;, gdzie &amp;lt;math&amp;gt;i_j&amp;lt;/math&amp;gt; to indeks w wymiarze ''j''. Tzn dla tablicy dwuwymiarowej: &amp;lt;tt&amp;gt;A[wiersz, kolumna]&amp;lt;/tt&amp;gt;.&lt;br /&gt;
[[Grafika:macierz.svg|right]]&lt;br /&gt;
* Łączenie tablic wykonuje się za pomocą funkcji &amp;lt;tt&amp;gt;numpy.concatenate((a1, a2, ...), axis=0)&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;a1, a2, ...&amp;lt;/tt&amp;gt; oznacza tablice, a &amp;lt;tt&amp;gt;axis&amp;lt;/tt&amp;gt; oś, w której tablice zostaną połączone. Parametr ten ma domyślnie wartość 0. Tablice muszą mieć taki sam rozmiar w osi, w której będą połączone. Funkcja zwraca tablicę wynikową.&lt;br /&gt;
* Usuwanie elementu z tablicy (wielowymiarowej):&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;dane2 = dane[numpy.r_[:i,i+1:dane_1.shape[0]]] &amp;lt;/source&amp;gt;&lt;br /&gt;
==Problemy==&lt;br /&gt;
===Proste operacje===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from numpy import *&lt;br /&gt;
&lt;br /&gt;
l1 = [1,1,1]&lt;br /&gt;
12 = ones(3)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Jaki będzie wynik następujących operacji:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;l1 * 3&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;l2 * 3&amp;lt;/source&amp;gt;&lt;br /&gt;
Jakie operacje należy wykonać na liście l1, aby otrzymać wynik analogiczny do l2*3?&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;l1 / 3&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;l2 / 3&amp;lt;/source&amp;gt;&lt;br /&gt;
===Plansza kółko-krzyżyk===&lt;br /&gt;
Zaprojektuj tablicę złużącą do gry w kółko i krzyżyk w trzech wymiarach. Kółka to zera, krzyżyki to jedynki. To znaczy zdefiniuj kilka funkcji, które będą umożliwiały grę w kółko i krzyżyk w trzech wymiarach:&lt;br /&gt;
* funkcję tworzącą pustą planszę&lt;br /&gt;
* funkcję stawiąjącą krzyżyk w wybranym miejscu(określonym współrzędnymi x,y,z)&lt;br /&gt;
* funkcję stawiąjącą kółko w wybranym miejscu&lt;br /&gt;
* funkcję wypisującą aktualny stan planszy&lt;br /&gt;
* Rozszerz poprzednie zadanie o wyrysowywanie trójwymiarowe stanu planszy.&lt;br /&gt;
* Utwórz ze zdefiniowanych funkcji moduł&lt;br /&gt;
===Dopasowanie metodą najmniejsztch kwadratów===&lt;br /&gt;
W pracy doświadczalnej wielokrotnie badamy zależność z jaką wielkość &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; zależy od wielkości &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;. &lt;br /&gt;
Zwykle ta zależność fizyczna jest postaci:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;eq:ocz&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;y = f(x;par)&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; &amp;amp;mdash; zależność fizyczna, &amp;lt;math&amp;gt;par&amp;lt;/math&amp;gt; &amp;amp;mdash; parametry.&lt;br /&gt;
&lt;br /&gt;
Żeby zobaczyć, czy funkcja &amp;lt;math&amp;gt;f(x;par)&amp;lt;/math&amp;gt; dobrze oddaje realną zależność fizyczną między &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; obliczamy suma kwadratów residuów (&amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;) &amp;amp;mdash; sumę kwadratów różnic wyników pomiaru i ich wartości oczekiwanych, wyliczonych z (&amp;lt;xr id=&amp;quot;eq:ocz&amp;quot;/&amp;gt;):&lt;br /&gt;
&amp;lt;equation id=&amp;quot;eq:ch2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;R = \sum_{i=1}^N \left( y_i-\mathrm{oczekiwane}_i\right)^2= \sum_{i=1}^N \left( y_i-f(x_i;par)\right)^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie para &amp;lt;math&amp;gt;(x_i,y_i)&amp;lt;/math&amp;gt; oznacza wynik piątego pomiaru wielkości &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Szukając parametrów &amp;lt;math&amp;gt;par&amp;lt;/math&amp;gt; (&amp;lt;xr id=&amp;quot;eq:ocz&amp;quot;/&amp;gt;), wybieramy te, dla których &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; jest najmniejsze. Jest wiele różnych algorytmów, którymi można się w tym posłużyć. Można też po prostu przeskanować przestrzeń parametrów, w szczególności, kiedy wiemy, jakie są fizyczne zakresy wartości tychże; i wybrać takie, które minimalizują &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Błąd dopasowania wybranego już parametru &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; przedstawia się następującym wzorem:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;eq:deltap&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\Delta \theta = \sqrt{\frac{1}{\frac 1 2 \frac{\mathrm \partial^2 R}{\mathrm \partial \theta^2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Napisz moduł zawierający funkcję do obliczenia sumy kwadratów residuów (&amp;lt;xr id=&amp;quot;eq:ch2&amp;quot;/&amp;gt;) i błędu dopasowania parameterów (&amp;lt;xr id=&amp;quot;eq:deltap&amp;quot;/&amp;gt;).&lt;br /&gt;
#Załóż, że funcja opisująca relację między danymi ma postać (&amp;lt;xr id=&amp;quot;eq:ocz&amp;quot;/&amp;gt;) &amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;func(dane,parametry)&amp;lt;/source&amp;gt;.&lt;br /&gt;
#Dane znajdują się w macierzy o wymiarach ''n''&amp;amp;times;2 (&amp;lt;tt&amp;gt;dane&amp;lt;/tt&amp;gt;).&lt;br /&gt;
#Funkcja obliczająca (&amp;lt;xr id=&amp;quot;eq:ch2&amp;quot;/&amp;gt;) powinna mieć przekazywane dane w wektorze o wymiarach (&amp;lt;tt&amp;gt;dane&amp;lt;/tt&amp;gt;), nazwę funkcji charakteryzującej zależność fizyczną i służącej do obliczania wartości oczekiwanych (&amp;lt;tt&amp;gt;func&amp;lt;/tt&amp;gt;) i listę parametrów funkcji (&amp;lt;tt&amp;gt;params&amp;lt;/tt&amp;gt;):&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt; def chi2(dane, func, params): &amp;lt;/source&amp;gt;&amp;lt;b&amp;gt;Pamietaj&amp;lt;/b&amp;gt; o rozpakowaniu listy z parametrami funkcji &amp;lt;tt&amp;gt;func&amp;lt;/tt&amp;gt;.&lt;br /&gt;
#Funkcja obliczająca (&amp;lt;xr id=&amp;quot;eq:deltap&amp;quot;/&amp;gt;) powinna zwracać niepewności wszystkich podanych w liście parametrów. Parametrem opcjonalnym powinno być &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;, służące do obliczenia drugiej pochodnej (patrz wskazówka 1). Funkcja powinna korzystać z funkcji &amp;lt;tt&amp;gt;chi2&amp;lt;/tt&amp;gt;. Nagłówek funkcji:&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;def delta_p(dane, func, params,delta=0.000001):&amp;lt;/source&amp;gt;&lt;br /&gt;
#Metodą ''brute force'', skanując przestrzeń parametrów, sprawdź, czy do danych pasuje zależność (&amp;lt;xr id=&amp;quot;eq:FR&amp;quot;/&amp;gt;) (opis danych i parametrów w tytule rysunku).&lt;br /&gt;
#Zobacz na wykresie, jak dobre jest Twoje dopasowanie.&lt;br /&gt;
#Zmodyfikuj funkcję, tak żeby mogła uwzględnić niepewności pomiarowe w obliczaniu sumy kwadratów residuów: &amp;lt;math&amp;gt;R =  \sum_{i=1}^N \left( \frac{y_i-f(x_i;par)}{\sigma_i}\right)^2&amp;lt;/math&amp;gt;, gdzie &amp;lt;math&amp;gt;\sigma_i&amp;lt;/math&amp;gt; ''i''-tą niepewność pomiarową &amp;lt;math&amp;gt;\mathrm{pomiar}_i&amp;lt;/math&amp;gt;. Załóż, że jeżeli tablica z danymi ma trzy kolumny, w trzeciej znajdują się niepewności pomiarowe &amp;lt;math&amp;gt;\delta y&amp;lt;/math&amp;gt;. Jeżeli tablica z danymi ma cztery kolumny, w czwartej znajdują się niepewności pomiarowe ''y''-ka &amp;amp;mdash; &amp;lt;math&amp;gt;\delta y&amp;lt;/math&amp;gt;, a w trzeciej niepewności pomiarowe ''x''-a &amp;amp;mdash; &amp;lt;math&amp;gt;\delta x&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dane znajdują się w [[Plik:Dane.txt]]. Pierwsza kolumna przedstawia interwały &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. Druga obliczone wartości wzmocnienia synaptycznego ''FR'', które może być opisywane następującą zależnością:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;eq:FR&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; FR=1+\left( 1+(1-U_\mathrm{SE}) e^{-\frac{T}{\tau_\mathrm{f}\right)^4&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;\tau_\mathrm{f} = \unit{5 - 100}{ms}&amp;lt;/math&amp;gt;&lt;br /&gt;
*&amp;lt;math&amp;gt;U_\mathrm{SE} = 0.001 - 0.03&amp;lt;/math&amp;gt;&lt;br /&gt;
W jakim zakresie &amp;lt;tt&amp;gt;Delta&amp;lt;/tt&amp;gt; wynik niepewności jest stabilny?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Wskazówka 1====&lt;br /&gt;
Numeryczne obliczanie pierwszej pochodnej:&lt;br /&gt;
::&amp;lt;math&amp;gt;\frac{\mathrm d x}{\mathrm dt} = \frac{x(t+\Delta t)-x(t)}{\Delta t}&amp;lt;/math&amp;gt;&lt;br /&gt;
Numeryczne obliczanie drugiej pochodnej:&lt;br /&gt;
::&amp;lt;math&amp;gt;\frac{\mathrm d^2 x}{\mathrm dt^2} = \frac{f'(x)-f'(x-\Delta t)}{\Delta t}=\frac{x(t+\Delta t) +x(t-\Delta t) -2x(t)}{\Delta t^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
====Wskazówka 2====&lt;br /&gt;
Skorzystaj z modułu &amp;lt;tt&amp;gt;Numpy&amp;lt;/tt&amp;gt; do wczytania danych (&amp;lt;tt&amp;gt;loadtxt&amp;lt;/tt&amp;gt;) oraz obliczenia wartości funkcji wykładniczej (&amp;lt;tt&amp;gt;exp&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie_z_chi2/rozwiązanie macierzowe===&lt;br /&gt;
Najpierw definiujemy funkcję służącą do obliczania FR na podstawie modelu teoretycznego:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from __future__ import division&lt;br /&gt;
import numpy&lt;br /&gt;
&lt;br /&gt;
def FRobl(tau, Use, T):&lt;br /&gt;
    return 1 + (1 + (1 - Use)*numpy.exp(-T/tau))**4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Proszę zwrócić uwagę, że tak zdefiniowana funkcja działa równie dobrze dla zwykłych liczb, jak i dla tablic &amp;lt;tt&amp;gt;numpy.ndarray&amp;lt;/tt&amp;gt;, o ile podane argumenty obsługują działania wykorzystywane w funkcji, czyli &amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;,  &amp;lt;tt&amp;gt;**&amp;lt;/tt&amp;gt;,  &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;,  &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;numpy.exp&amp;lt;/tt&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z kolei &amp;lt;tt&amp;gt;__future__.division&amp;lt;/tt&amp;gt; jest importowane bo chce się upewnić, że dzielenie zawsze jest zwykłym dzieleniem, nawet jeśli funkcja zostanie wywołana jako &amp;lt;tt&amp;gt;FRobl(2, 0.03, 1)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Następnie definiujemy funkcje do obliczania pierwszej i drugiej pochodnej:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
def pochodna(f, i, *params, **opts):&lt;br /&gt;
    eps = opts.get('eps', 1e-6)&lt;br /&gt;
    params_eps = list(params)&lt;br /&gt;
    params_eps[i] += eps&lt;br /&gt;
    return (f(*params_eps) - f(*params))/eps&lt;br /&gt;
&lt;br /&gt;
def pochodna2(f, i, *params, **opts):&lt;br /&gt;
    eps = opts.get('eps', 1e-6)&lt;br /&gt;
    params_eps = list(params)&lt;br /&gt;
    params_eps[i] += eps&lt;br /&gt;
    return (pochodna(f, i, *params_eps) -&lt;br /&gt;
            pochodna(f, i, *params)) / eps&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Jeśli się pamięta wzór na pochodną, to tutaj nie ma wielkich niespodzianek.&lt;br /&gt;
&lt;br /&gt;
Jak działa &amp;lt;tt&amp;gt;*params, **opts&amp;lt;/tt&amp;gt; w liście parametrów?&amp;lt;br&amp;gt;&lt;br /&gt;
Mamy argument &amp;lt;tt&amp;gt;params&amp;lt;/tt&amp;gt;, który zawierać będzie wszystkie nadmiarowe argumenty pozycyjne, oraz &amp;lt;tt&amp;gt;opts&amp;lt;/tt&amp;gt; który zawierać będzie wszystkie nazwane argumenty. Dzięki temu możemy funkcję wywołać z dowolną liczbą parametrów &amp;lt;tt&amp;gt;params&amp;lt;/tt&amp;gt;, które zostaną przekazane do &amp;lt;tt&amp;gt;f&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Do &amp;lt;tt&amp;gt;opts&amp;lt;/tt&amp;gt; trafiają argumenty nazwane. Jeśli napiszemy &amp;lt;tt&amp;gt;eps=...&amp;lt;/tt&amp;gt;, to nasz argument zostanie wydobyty ze słownika i użyty jako &amp;lt;tt&amp;gt;eps&amp;lt;/tt&amp;gt;. Jeśli nie podamy argumentu &amp;lt;tt&amp;gt;eps=...&amp;lt;/tt&amp;gt;, to jako &amp;lt;tt&amp;gt;eps&amp;lt;/tt&amp;gt; zostanie użyty&lt;br /&gt;
drugi argument do &amp;lt;tt&amp;gt;get&amp;lt;/tt&amp;gt;, czyli 1e-6. Jeśli podamy argumenty nazwane inne niż  &amp;lt;tt&amp;gt;eps=...&amp;lt;/tt&amp;gt; to zostaną one zignorowane -- niestety nasza funkcja nie jest doskonała.&lt;br /&gt;
&lt;br /&gt;
Aby obliczyć niepewność parametru, musimy mieć funkcję obliczającą rms (&amp;lt;tt&amp;gt;rmsfunc&amp;lt;/tt&amp;gt;) i miejsce w którym liczymy (&amp;lt;tt&amp;gt;params&amp;lt;/tt&amp;gt;) i numer parametru który nas interesuje (&amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
def niepewnosc(rmsfunc, i, *params):&lt;br /&gt;
    return (pochodna2(rmsfunc, i, *params)/2)**-0.5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W naszym wypadku funkcja obliczająca rms może wyglądać tak:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
def frms(T, FR, tau, Use):&lt;br /&gt;
    FR2 = FRobl(tau, Use, T)&lt;br /&gt;
    return ((FR2 - FR)**2).mean()**0.5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Sens jest taki, że obliczamy co daje model teoretyczny &amp;lt;tt&amp;gt;FRobl&amp;lt;/tt&amp;gt; jak dla danego zestawu (&amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;U_{SE}&amp;lt;/math&amp;gt;) = (tau, Use) i pewnego &amp;lt;tt&amp;gt;T&amp;lt;/tt&amp;gt; i porównujemy z wynikami doświadczalnymi &amp;lt;tt&amp;gt;FR&amp;lt;/tt&amp;gt;. Otrzymujemy zestaw odchyleń, a rms jest oczywiście pierwiastkiem ze średniej kwadratów tych odchyleń.&lt;br /&gt;
&lt;br /&gt;
Przechodąc do meritum, możemy albo się posłużyć danymi doświadczalnymi, albo np. wygenerować dane dla znanych ($\tau$, $U_{SE}$). To drugie podejście pozwala nam sprawdzić naszą metodę, bo wiemy dokładnie jaki wynik powinniśmy otrzymać.&lt;br /&gt;
&lt;br /&gt;
Zestaw danych wygenerowanych wraz z parametrami:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
def dane_symulowane(tau, Use):&lt;br /&gt;
    T = numpy.arange(5, 80, 5)&lt;br /&gt;
    return T, FRobl(tau, Use, T), tau, Use&lt;br /&gt;
&lt;br /&gt;
T_opt, FR_opt, tau_opt, Use_opt = dane_symulowane(30, 0.02)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dopasowanie wykonujemy metodą &amp;lt;i&amp;gt;brute force&amp;lt;/i&amp;gt;, czyli po prostu przeszukujemy całą przestrzeń parametrów.&lt;br /&gt;
Implementację rozbijmy na dwie części &amp;amp;mdash; najpierw obliczanie rms, potem znajdywanie minimum:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
def rms_brute_force(T, FR):&lt;br /&gt;
    tau = numpy.arange(5, 101, 1)&lt;br /&gt;
    Use = numpy.arange(0.001, 0.031, 0.001)&lt;br /&gt;
&lt;br /&gt;
    # tau3 = tau&lt;br /&gt;
    # Use3 = Use[:, numpy.newaxis]&lt;br /&gt;
    # T3 = T[:, numpy.newaxis, numpy.newaxis]&lt;br /&gt;
&lt;br /&gt;
    tau3 = tau[numpy.newaxis, numpy.newaxis, :]&lt;br /&gt;
    Use3 = Use[numpy.newaxis, :, numpy.newaxis]&lt;br /&gt;
    T3 = T[:, numpy.newaxis, numpy.newaxis]&lt;br /&gt;
&lt;br /&gt;
    print('kształty tau, Use, T: ',&lt;br /&gt;
          tau3.shape, Use3.shape, T3.shape)&lt;br /&gt;
&lt;br /&gt;
    wynik = FRobl(tau3, Use3, T3)&lt;br /&gt;
&lt;br /&gt;
    FR3 = FR[:, numpy.newaxis, numpy.newaxis]&lt;br /&gt;
    odchylenie = wynik - FR3&lt;br /&gt;
    rms = (odchylenie**2).mean(axis=0)&lt;br /&gt;
    return tau, Use, rms&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Do szybkiego przeprowadzenia obliczeń na całej siatce wykorzystujemy broadcasting. Tworzymy trzy wektory, czyli tablice o długości większej niż 1 w jednym tylko kierunku &amp;amp;mdash; (1, 1, M2), (1, M1, 1), (N, 1, 1). Każdy z wektorów jest skierowany w inną stronę, więc po wykonaniu działania element po elemencie (tak jak to się dzieje w &amp;lt;tt&amp;gt;FRobl&amp;lt;/tt&amp;gt;), otrzymujemy macierz o wymiarze (N, M1, M2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
def dopasowanie_brute_force(T, FR):&lt;br /&gt;
    tau, Use, rms = rms_brute_force(T, FR)&lt;br /&gt;
    ind_min = numpy.unravel_index(rms.argmin(), rms.shape)&lt;br /&gt;
    Use_min = Use[ind_min[0]]&lt;br /&gt;
    tau_min = tau[ind_min[1]]&lt;br /&gt;
    print('minimum dopasowania to τ={} Use={}'.format(tau_min, Use_min))&lt;br /&gt;
    assert frms(T, FR, tau_min, Use_min) == rms.min()&lt;br /&gt;
&lt;br /&gt;
    D_tau_min = niepewnosc(frms, 2, *(T, FR, tau_min, Use_min))&lt;br /&gt;
    D_Use_min = niepewnosc(frms, 3, *(T, FR, tau_min, Use_min))&lt;br /&gt;
    print('niepewności wynoszą Δτ={} ΔUse={}'.format(D_Use_min, D_tau_min))&lt;br /&gt;
&lt;br /&gt;
    return tau, Use, rms, tau_min, D_tau_min, Use_min, D_Use_min&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aby znaleźć optymalne wartości parametrów, czyli takie dla których rms jest najmniejszy, wykorzystujemy &lt;br /&gt;
&amp;lt;tt&amp;gt;numpy.argmin&amp;lt;/tt&amp;gt;. Ta funkcja nam zwraca indeks minimalnego elementu, ale po &amp;quot;spłaszczeniu&amp;quot;. Numer wiersza i kolumny uzyskujmy przez &amp;lt;tt&amp;gt;numpy.unravel_index&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Do obliczenia niepewności mamy zdefiniowaną wcześniej funkcję &amp;lt;tt&amp;gt;niepewnosc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
tau, Use, rms, tau_min, D_tau_min, Use_min, D_use_min = dopasowanie_brute_force(T_opt, FR_opt)&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki możemy narysować przy pomocy następujących funkcji, które zostawie prawie bez komentarza:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from __future__ import unicode_literals&lt;br /&gt;
from matplotlib import pyplot, patches&lt;br /&gt;
__name__ == '__main__' and pyplot.ion()&lt;br /&gt;
# unicode_literals powoduje, że matplotlib wie, że wszystkie stringi to Unicode&lt;br /&gt;
# pyplot.ion() podowuje coś&lt;br /&gt;
&lt;br /&gt;
def plot_map(tau, Use, rms):&lt;br /&gt;
    f = pyplot.figure()&lt;br /&gt;
    ax = f.add_subplot(111)&lt;br /&gt;
    X, Y = numpy.meshgrid(tau, Use)&lt;br /&gt;
    map = ax.pcolor(X, Y, rms)&lt;br /&gt;
    ax.set_xlabel(r'tau')&lt;br /&gt;
    ax.set_ylabel(r'Use')&lt;br /&gt;
    f.colorbar(map)&lt;br /&gt;
    f.show()&lt;br /&gt;
    return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Plik:plot_map.svg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
def plot_map2(tau, Use, rms, **kwargs):&lt;br /&gt;
    f = pyplot.figure()&lt;br /&gt;
    ax = f.add_subplot(111)&lt;br /&gt;
    X, Y = numpy.meshgrid(tau, Use)&lt;br /&gt;
    cont = ax.contour(X, Y, rms)&lt;br /&gt;
    ax.set_xlabel(r'tau')&lt;br /&gt;
    ax.set_ylabel(r'Use')&lt;br /&gt;
    f.colorbar(cont)&lt;br /&gt;
    ax.clabel(cont, inline=1, **kwargs)&lt;br /&gt;
    f.show()&lt;br /&gt;
    return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Plik:plot_map2.svg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
def plot_dane(T, FR, label1, T2, FR2, label2):&lt;br /&gt;
    f = pyplot.figure()&lt;br /&gt;
    ax = f.add_subplot(111)&lt;br /&gt;
    ax.set_xlabel(r'T')&lt;br /&gt;
    ax.set_ylabel(r'FR')&lt;br /&gt;
    ax.plot(T, FR, 'ro', label=label1)&lt;br /&gt;
    ax.plot(T2, FR2, '-g', label=label2)&lt;br /&gt;
    ax.legend(loc='best')&lt;br /&gt;
    return f&lt;br /&gt;
&lt;br /&gt;
def plot_dopasowanie(T, FR, tau, Use):&lt;br /&gt;
    T2 = numpy.linspace(T.min() - 1, T.max() + 10, 300)&lt;br /&gt;
    FR2 = FRobl(tau, Use, T2)&lt;br /&gt;
    return plot_dane(T, FR, 'dane', T2, FR2, 'dopasowanie')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Plik:plot_dopasowanie.svg]]&lt;br /&gt;
&lt;br /&gt;
I na koniec rysunek z zeznaczonym rms:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
def plot_dopasowanie_map(tau, Use, rms,&lt;br /&gt;
                         tau_min, D_tau_min, Use_min, D_Use_min):&lt;br /&gt;
    f = plot_map(tau, Use, rms)&lt;br /&gt;
    ax = f.gca()&lt;br /&gt;
&lt;br /&gt;
    ax.plot(tau_min, Use_min, 'xy', markersize=5)&lt;br /&gt;
&lt;br /&gt;
    ellip = patches.Ellipse(xy=(tau_min, Use_min),&lt;br /&gt;
                            width=D_tau_min, height=D_Use_min)&lt;br /&gt;
    ellip.set_facecolor('none')&lt;br /&gt;
    ellip.set_linestyle('dashed')&lt;br /&gt;
    ellip.set_edgecolor('yellow')&lt;br /&gt;
    ax.add_artist(ellip)&lt;br /&gt;
    return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Plik:plot_dopasowanie_map.svg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Działania macierzowe===&lt;br /&gt;
Broadcasting (dopełnianie) jest słowem, które określa, jak numpy traktuje wektory o różnym kształcie. Przy spełnieniu pewnych warunków, mniejszy wektor jest &amp;quot;rozszerzony&amp;quot; (powiększony) tak, żeby mieć kształt korespondujący z kształtem większego wektora &amp;amp;mdash; odpowiednie wymiary zostają dopełnione. Dopełnienie umożliwia przeprowadzenie operacji macierzowych tak, że pętle są wykonywane w C, a nie w Pythonie, co zwykle prowadzi do bardziej efektywnych implementacji algorytmów.&lt;br /&gt;
&lt;br /&gt;
[[Plik:Broadcasting_1D.png|thumb|&amp;lt;figure id=&amp;quot;fig:rys_b1&amp;quot;/&amp;gt;Dodanie liczby 3 do wektora.]]&lt;br /&gt;
Najprostszym przypadkiem broadcastingu jest dodawanie liczby (skalara) do macierzy. W tej sytuacji, każdy element macierzy zostanie zwiększony o tęże liczbę. Przyjrzyj się następującemu przykładowi i obrazkowi &amp;lt;xr id=&amp;quot;fig:rys_b1&amp;quot;/&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; x = np.arange(4)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; x = array([0, 1, 2, 3])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; x + 3&lt;br /&gt;
array([3, 4, 5, 6])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Plik:Broadcasting_2D.png|thumb|&amp;lt;figure id=&amp;quot;fig:rys_b2&amp;quot;/&amp;gt;Dopełnienie jednowymiarowego wektora tak, żeby można było go dodać do wektora dwuwymiarowego.]]&lt;br /&gt;
W przypadku więcejwymiarowym, oś, która powinna zostać dodana &amp;amp;mdash; w którą stronę wektor powinien zostać dopełniony, zostaje zaznaczona ''explicite'' słowem &amp;lt;tt&amp;gt;np.newaxis&amp;lt;/tt&amp;gt; (albo &amp;lt;tt&amp;gt;None&amp;lt;/tt&amp;gt;). Tak, jak na poniższym przykładzie i Rys. &amp;lt;xr id=&amp;quot;fig:rys_b2&amp;quot;/&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a = np.arange(12).reshape((3,4))&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; b = np.array([1,2,3])[:,np.newaxis]&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a + b&lt;br /&gt;
array([[ 1,  2,  3,  4],&lt;br /&gt;
       [ 6,  7,  8,  9],&lt;br /&gt;
       [11, 12, 13, 14]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Plik:Broadcasting_3D.png|thumb|&amp;lt;figure id=&amp;quot;fig:rys_b3&amp;quot;/&amp;gt;Dopełnienie dwuwymiarowego wektora tak, żeby po dodaniu wektora jednowymiarowego, utworzyć trójwymiarowy wektor.]]&lt;br /&gt;
Przypadek trójwymiarowy (Rys. &amp;lt;xr id=&amp;quot;fig:rys_b3&amp;quot;/&amp;gt;):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; x = np.zeros((3, 5))&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; y = np.zeros(8)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; (x[..., None] + y).shape&lt;br /&gt;
(3, 5, 8)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Można tez skorzystać z funkcji [http://docs.scipy.org/doc/numpy/reference/generated/numpy.broadcast_arrays.html &amp;lt;tt&amp;gt;np.broadcast_arrays&amp;lt;/tt&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
====Zadanie 1====&lt;br /&gt;
Przed przystąpieniem do zadania polecamy zapoznać się z przykładami [http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html stąd]&lt;br /&gt;
&lt;br /&gt;
====Zadanie 2==== &lt;br /&gt;
Przepisz operacje zachodzące w pętlach i funkcjach w [[TI:Matplotlib_%2B_numpy#Dopasowanie_metod.C4.85_najmniejsztch_kwadrat.C3.B3w|zadaniu z dopasowaniem metodą najmniejszych kwadratów]] tak, żeby skorzystać z operacji macierzowych.&lt;br /&gt;
&lt;br /&gt;
Żeby znaleźć najmniejszą wartość w macierzy z kwadratami residuów skorzystaj z metody &amp;lt;tt&amp;gt;min()&amp;lt;/tt&amp;gt; strunktury &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt;. Żeby uzyskać spłaszczony indeks tego elementu skorzystaj z metody &amp;lt;tt&amp;gt;argmin()&amp;lt;/tt&amp;gt; strunktury &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt; i następnie z funkcji [http://docs.scipy.org/doc/numpy/reference/generated/numpy.unravel_index.html#numpy.unravel_index &amp;lt;tt&amp;gt;numpy.unravel_index(indices, dims, order='C')&amp;lt;/tt&amp;gt;], żeby znaleźć wartości parametrów, które minimalizują sumę kwadratów residuów.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Deklarowanie własnych typów danych===&lt;br /&gt;
Deklarowanie własnych typów danych odbywa się za pomocą funkcji &amp;lt;tt&amp;gt;dtype&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Przykładowo (przykłady z dokumentacji):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; np.dtype([('f1', np.int16)])&lt;br /&gt;
dtype([('f1', '&amp;lt;i2')])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Daje nam rekord o polu 'f1' o typie danych &amp;lt;tt&amp;gt;int16&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
np.dtype([('f1', np.uint), ('f2', np.int32)])&lt;br /&gt;
dtype([('f1', '&amp;lt;u4'), ('f2', '&amp;lt;i4')])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Daje nam dwa pola rekordu jedno typu unsigned &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt;, drugie typu &amp;lt;tt&amp;gt;int32&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Można też zadeklarować rekord zawierający liczbę typu &amp;lt;tt&amp;gt;double&amp;lt;/tt&amp;gt; i string dziesięciobajtowy:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
np.dtype([('a','f8'),('b','S10')])&lt;br /&gt;
dtype([('a', '&amp;lt;f8'), ('b', '|S10')])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przykład użycia:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pycon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; typ = np.dtype([(&amp;quot;a&amp;quot;, np.int16), (&amp;quot;b&amp;quot;, &amp;quot;|S10&amp;quot;)])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; typ&lt;br /&gt;
dtype([('a', '&amp;lt;i2'), ('b', '|S10')])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a = np.array([(5, &amp;quot;napis&amp;quot;)], dtype = typ)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a&lt;br /&gt;
array([(5, 'napis')], &lt;br /&gt;
      dtype=[('a', '&amp;lt;i2'), ('b', '|S10')])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a = np.array([(&amp;quot;n&amp;quot;, &amp;quot;napis&amp;quot;)], dtype = typ)&lt;br /&gt;
&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;pyshell#171&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
    a = np.array([(&amp;quot;n&amp;quot;, &amp;quot;napis&amp;quot;)], dtype = typ)&lt;br /&gt;
TypeError: expected a readable buffer object&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a = np.array([(5, 5)], dtype = typ)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a&lt;br /&gt;
array([(5, '5')], &lt;br /&gt;
      dtype=[('a', '&amp;lt;i2'), ('b', '|S10')])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a = np.array([(5,)], dtype = typ)&lt;br /&gt;
&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;pyshell#174&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
    a = np.array([(5,)], dtype = typ)&lt;br /&gt;
TypeError: expected a readable buffer object&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; typ2&lt;br /&gt;
dtype([('c', '&amp;lt;i2')])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; typ2 = np.dtype([(&amp;quot;c&amp;quot;, (np.int16, 3))])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a = np.array([((3.5,1),)], dtype = typ2)&lt;br /&gt;
&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;pyshell#218&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
    a = np.array([((3.5,1),)], dtype = typ2)&lt;br /&gt;
TypeError: expected a readable buffer object&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a = np.array([((3,3,3),)], dtype = typ2)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a&lt;br /&gt;
array([([3, 3, 3],)], &lt;br /&gt;
      dtype=[('c', '&amp;lt;i2', 3)])&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; typ3 = np.dtype([(&amp;quot;c&amp;quot;, (np.int16, 5))])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a = np.array([((3,3,4,5),)], dtype = typ3)&lt;br /&gt;
&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;pyshell#225&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
    a = np.array([((3,3,4,5),)], dtype = typ3)&lt;br /&gt;
TypeError: expected a readable buffer object&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a = np.array([((3,3,4,5,6),)], dtype = typ3)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; a&lt;br /&gt;
array([([3, 3, 4, 5, 6],)], &lt;br /&gt;
      dtype=[('c', '&amp;lt;i2', 5)])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Zadanie 1==== &lt;br /&gt;
Pod [http://escher.fuw.edu.pl/~mm/KAMIL/kamil_eksp_1290627532.3900001.txt linkiem] znajduje się plik tekstowy zawierający dane o triggerach z jednego z eksperymentów. Obejrzyj dane. Zaprojektuj za pomocą funkcji &amp;lt;tt&amp;gt;dtype&amp;lt;/tt&amp;gt; z modułu &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; typ danych, który opisuję dane, znajdujące się w rzędach. Następnie wczytaj je za pomocą funkcji &amp;lt;tt&amp;gt;loadtxt&amp;lt;/tt&amp;gt;, pamietając o opuszczeniu pierwszej linii i zadaniu przecinków, jako separatorów między kolumnami i wypisz wektor z danymi. Program nie powinien mieć więcej niż 5 linii.&lt;br /&gt;
&lt;br /&gt;
====Zadanie 2==== &lt;br /&gt;
Wczytaj dane z poprzedniego zadania i spod [http://escher.fuw.edu.pl/~mm/KAMIL/kamil_eksp_1290760577.937.txt łącza], a następnie wypisz średnie czasy odpowiedzi dla bodźców typu pozytywnego, neutralnego i negatywnego&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>