<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rjb</id>
	<title>Brain-wiki - Wkład użytkownika [pl]</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rjb"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php/Specjalna:Wk%C5%82ad/Rjb"/>
	<updated>2026-04-04T15:22:47Z</updated>
	<subtitle>Wkład użytkownika</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Numpy&amp;diff=4435</id>
		<title>TI/Numpy</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Numpy&amp;diff=4435"/>
		<updated>2015-12-08T13:02:01Z</updated>

		<summary type="html">&lt;p&gt;Rjb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Grafika:Numpylogo.png|right]]&lt;br /&gt;
&lt;br /&gt;
== Pakiet Numpy ==&lt;br /&gt;
&lt;br /&gt;
Moduł [http://numpy.scipy.org/ Numpy] jest podstawowym zestawem narzędzi dla języka Python umożliwiającym zaawansowane obliczenia matematyczne, w szczególności do zastosowań naukowych (tzw. ''obliczenia numeryczne'', jak mnożenie i dodawanie macierzy, diagonalizacja czy odwrócenie, całkowanie, rozwiązywanie równań, itd.). Daje on nam do dyspozycji specjalizowane typy danych, operacje i funkcje, których nie ma w typowej instalacji Pythona. Natomiast moduł [http://scipy.org/ Scipy] pozwala na dostęp do bardziej złożonych i różnorodnych algorytmów wykorzystujących bazę zdefiniowaną w Numpy.&lt;br /&gt;
&lt;br /&gt;
Przedstawimy tutaj tylko wstęp do Numpy. Wynika to z faktu, że opisanie licznych funkcji dostępnych w bibliotece Numpy jest ogromną pracą, która zupełnie nie ma sensu — równie dobrze można zajrzeć bezpośrednio do źródła,&lt;br /&gt;
http://docs.scipy.org/doc/numpy/reference/.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Sercem modułu Numpy jest wielowymiarowa macierz służąca do przechowywania wartości jednego typu, takich jak 32-bitowe liczby całkowite czy 64-bitowe liczby zmienno-przecinkowe.--&amp;gt;&lt;br /&gt;
Najważniejszym obiektem, na którym bazuje pakiet Numpy i szereg pakietów z niego korzystających jest klasa &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt; wprowadzająca obiekty &amp;lt;tt&amp;gt;array&amp;lt;/tt&amp;gt;. Obiekty array możemy traktować jako uniwersalne pojemniki na dane w postaci ''macierzy'' (czyli ''wektorów'' lub ''tablic''). W porównaniu ze standardowymi typami sekwencji Pythonowych (lista, krotka) jest kilka różnic w operowaniu tymi obiektami:&lt;br /&gt;
# obiekty przechowywane w macierzy &amp;lt;tt&amp;gt;array&amp;lt;/tt&amp;gt; muszą być wszystkie tego samego typu;&lt;br /&gt;
# obiekty &amp;lt;tt&amp;gt;array&amp;lt;/tt&amp;gt; zachowują swój rozmiar; przy zmianie rozmiaru takiego obiektu powstaje nowy obiekt, a obiekt sprzed zmiany zostaje usunięty;&lt;br /&gt;
# obiekty &amp;lt;tt&amp;gt;array&amp;lt;/tt&amp;gt; wyposażone są w bogaty zestaw funkcji operujących na wszystkich przechowywanych w obiekcie danych, specjalnie optymalizowanych do przetwarzania dużych ilości danych. Jak to działa zostanie zaprezentowane poniżej.&lt;br /&gt;
&lt;br /&gt;
=== Tworzenie ===&lt;br /&gt;
&lt;br /&gt;
Najprostszym sposobem stworzenia macierzy Numpy jest wywołanie funkcji &amp;lt;tt&amp;gt;array&amp;lt;/tt&amp;gt; z argumentem w postaci listy liczb. Jeśli zamiast listy liczb użyjemy listy zawierającej inne listy (tzw. listy ''zagnieżdżone''), to otrzymamy macierz wielowymiarową. Na przykład jeśli listy są podwójnie zagnieżdzone, to otrzymujemy macierz dwuwymiarową (tablicę).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# przykład wykorzystania Numpy&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import numpy&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; A = numpy.array([1, 3, 7, 2, 8])&lt;br /&gt;
array([1, 3, 7, 2, 8])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; B = numpy.array([[1, 2, 3], [4, 5, 6]])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; B&lt;br /&gt;
array([[1, 2, 3],&lt;br /&gt;
       [4, 5, 6]])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; B.transpose()&lt;br /&gt;
array([[1, 4],&lt;br /&gt;
       [2, 5],&lt;br /&gt;
       [3, 6]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Innym sposobem tworzenia macierzy jest funkcja &amp;lt;tt&amp;gt;numpy.arange&amp;lt;/tt&amp;gt;, która działa analogicznie do &amp;lt;tt&amp;gt;range&amp;lt;/tt&amp;gt;, tyle tylko, że zwraca macierz zamiast listy.&lt;br /&gt;
Argumenty są takie same:&lt;br /&gt;
# indeks początkowy [opcjonalnie, domyślnie 0]&lt;br /&gt;
# indeks następny po końcowym&lt;br /&gt;
# krok [opcjonalnie, domyślnie 1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; numpy.arange(1000000)&lt;br /&gt;
array([     0,      1,      2, ..., 999997, 999998, 999999])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak było już wspomniane, w przypadku macierzy &amp;lt;tt&amp;gt;array&amp;lt;/tt&amp;gt; typowe operacje matematyczne możemy przeprowadzić dla wszystkich elementów macierzy przy użyciu jednego operatora lub funkcji. Zachowanie takie jest odmienne niż w przypadku list czy innych sekwencji Pythona. Jeśli chcielibyśmy na przykład pomnożyć wszystkie elementy listy &amp;lt;tt&amp;gt;L&amp;lt;/tt&amp;gt; przez liczbę &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt;, musimy użyć pętli:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
L = [1, 3, 5, 2, 3, 1]&lt;br /&gt;
for i in L:&lt;br /&gt;
    L[i]=L[i]*a&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Natomiast mnożenie wszystkich elementów macierzy &amp;lt;tt&amp;gt;M&amp;lt;/tt&amp;gt; przez liczbę &amp;lt;tt&amp;gt;a&amp;lt;/tt&amp;gt; wygląda tak:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
M = numpy.array([1, 3, 5, 2, 3, 1])&lt;br /&gt;
M = M*a&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje wykonywane od razu na całych macierzach mają wiele zalet. Kod programu jest prostszy i krótszy, przez co mniej podatny na błędy. Poza tym nie musimy przejmować się konkretną realizacją danej operacji &amp;amp;mdash; robi to za nas funkcja pakietu Numpy, która jest specjalnie optymalizowana, żeby działała jak najszybciej.&lt;br /&gt;
&lt;br /&gt;
;Inne: zob.[http://docs.scipy.org/doc/numpy/reference/generated/numpy.mgrid.html numpy.mgrid], [http://docs.scipy.org/doc/numpy/reference/generated/numpy.ogrid.html numpy.ogrid], [http://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html numpy.linspace], [http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html numpy.zeros], [http://docs.scipy.org/doc/numpy/reference/generated/numpy.ones.html numpy.ones], [http://docs.scipy.org/doc/numpy/reference/generated/numpy.r_.html numpy.r_].&lt;br /&gt;
&lt;br /&gt;
=== Wydobywanie danych ===&lt;br /&gt;
==== Pojedyncze liczby ====&lt;br /&gt;
Dostęp do elementów (i pod-macierzy) jest możliwy poprzez wykorzystanie notacji indeksowej (&amp;lt;tt&amp;gt;macierz[i]&amp;lt;/tt&amp;gt;) jak i wycinkowej (&amp;lt;tt&amp;gt;macierz[i:j]&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Dostęp do pojedynczego elementu:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; A = array([[1, 2, 3],[4,5,6]])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; A&lt;br /&gt;
array([[1, 2, 3],&lt;br /&gt;
       [4, 5, 6]])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; A[0][2]    # podobnie jak w Pythonie,numeracja od 0&lt;br /&gt;
3&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; A[0, 2]&lt;br /&gt;
3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indeksy dotyczące poszczególnych wymiarów można oddzielić przecinkami.&lt;br /&gt;
&lt;br /&gt;
[[Grafika:Macierz.svg|right]]&lt;br /&gt;
&lt;br /&gt;
Macierz &amp;lt;tt&amp;gt;A&amp;lt;/tt&amp;gt; jest tablicą dwuwymiarową, i sposób numerowania zawartych w niej obiektów jest następujący: pierwszy indeks przebiega pierwszy wymiar (wybiera wiersz), drugi indeks przebiega drugi wymiar (wybiera kolumnę).&lt;br /&gt;
&lt;br /&gt;
==== Pod-macierze ====&lt;br /&gt;
Dostęp do pod-macierzy:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; A[1]             # wiersz 1&lt;br /&gt;
array([4, 5, 6])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; A[1, :]          # wiersz 1, wszystkie kolumny&lt;br /&gt;
array([4, 5, 6])&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; A[:, 1]          # wszystkie wiersze, kolumna 1&lt;br /&gt;
array([2, 5])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Jak widać, ograniczenie się do pojedynczego punktu w danym wymiarze, powoduje degenerację tego wymiaru. Uzyskuje się macierz, w której liczba wymiarów jest mniejsza o jeden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; A[:, 1:]&lt;br /&gt;
array([[2, 3],&lt;br /&gt;
       [5, 6]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pierwszym wymiarze (wiersze) bierzemy wszystko, natomiast w drugim od 1 do końca. Efektywnie wycinamy kolumnę 0.&lt;br /&gt;
&lt;br /&gt;
==== Indeksowanie macierzy macierzami ====&lt;br /&gt;
Do wybrania elementów z macierzy można tez użyć innej macierzy. Może to być&lt;br /&gt;
* macierz liczb — wówczas są one traktowane jako indeksy. Wybieramy te elementy, które uzyskalibyśmy indeksując każdym z indeksów z osobna&lt;br /&gt;
* macierz wartości logicznych (''boolean'') rozmiaru macierzy z danymi. Wybieramy te elementy, którym odpowiada &amp;lt;tt&amp;gt;True&amp;lt;/tt&amp;gt; w macierzy indeksującej.&lt;br /&gt;
Uwaga: W wyniku dostajemy macierz jedno wierszową.&lt;br /&gt;
;Przykład:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print A&lt;br /&gt;
[[1 2 3]&lt;br /&gt;
 [4 5 6]]&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print A &amp;gt; 2&lt;br /&gt;
[[False False  True]&lt;br /&gt;
 [ True  True  True]]&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print A[A &amp;gt; 2]&lt;br /&gt;
[3 4 5 6]&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print A[A % 2 == 0]&lt;br /&gt;
[2 4 6]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Więcej: http://docs.scipy.org/doc/numpy/user/basics.indexing.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Broadcasting ===&lt;br /&gt;
TODO&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Istnieją natomiast silne różnice, które postaram się przedstawić i uzasadnić.&lt;br /&gt;
&lt;br /&gt;
Piersza istotna właściwość numpy.ndarray to&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{/Tabliczka}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Porównanie liczb w Numpy i liczb w Pythonie ==&lt;br /&gt;
Przejście od Pythona do Numpy oznacza odejście od obiektowości. Oczywiście takie stwierdzenie można natychmiast skontrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
    numpy.random.random((10,10)).var()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
jest typowym przykładem notacji obiektowej, i generalnie ma cechy obiektowości (ukrywanie detali implementacji, polimorfizm).&lt;br /&gt;
Odejście od obiektowości występuje tylko na poziomie indywidualnych elementów — liczb. &lt;br /&gt;
&lt;br /&gt;
[[Grafika:Float32python.png|300px|left]]&lt;br /&gt;
[[Grafika:Float32.png|150px|right]] &lt;br /&gt;
W Pythonie, tak jak w zasadniczej większości języków programowania, operacje na liczbach są ostatecznie wykonywane przez procesor, w identyczny sposób niezależnie od języka programowania. A procesor, jak wiadomo, umie wykonywać tylko proste operacje. Przez to liczby, które się mu podaje by wykonać na nich działania, są w ściśle określonym formacie, niezależnym od języka programowania. Tak więc obiekt w Pythonie, np. liczba zmiennoprzecinkowa, zawiera pewne meta-informacje o tym obiekcie (jak ''reference-count'', czyli liczba użytkowników obiektu, i typ, czyli przypisanie do klasy) oraz właściwe dane, w formacie oczekiwanym przez procesor.&lt;br /&gt;
&lt;br /&gt;
Rysunki powyżej przedstawiają schematycznie zmienną w Pythonie (typu float) i pojedynczy element macierzy &amp;lt;tt&amp;gt;numpy.ndarray&amp;lt;/tt&amp;gt;.&lt;br /&gt;
W przypadku architektury 32-bitowej, liczba float ma 4 bajty (32 bity), a cały obiekt 12 bajtów, czyli 96 bitów).&lt;br /&gt;
&lt;br /&gt;
[[Grafika:Lista 4.svg|300px|left|caption||lista czterech liczb w Pythonie]]&lt;br /&gt;
[[Grafika:Tablica_numpy.svg|200px|right|caption||macierz czterech liczb w Numpy]]&lt;br /&gt;
Odejście od obiektowości w Numpy oznacza zatracenie obiektowości indywidualnych elementów macierzy, natomiast sam obiekt &amp;lt;tt&amp;gt;numpy.ndarray&amp;lt;/tt&amp;gt; bardzo silnie wykorzystuje notację i właściwości podejścia obiektowego. Indywidualne elementy macierzy muszą być tego samego typu — oznacza to ten sam rozmiar w bajtach oraz identyczną interpretację i zachowanie każdego elementu.&lt;br /&gt;
&lt;br /&gt;
Można powiedzieć, że &amp;lt;tt&amp;gt;numpy.ndarray&amp;lt;/tt&amp;gt; rezygnuje z części możliwości na rzecz wydajności, przed wszystkim różnorodności typów przedstawionej jak na rysunku poniżej.&lt;br /&gt;
[[Grafika:Lista 4 różne.svg|300px|center|caption||lista może zawierać różne obiekty]]&lt;br /&gt;
&lt;br /&gt;
;„Eksport” danych z Numpy do Pythona&lt;br /&gt;
Każda liczba w Pythonie jest indywidualnym obiektem. Liczby w Numpy takie nie są. Niemniej, kiedy wybierzemy jeden element z macierzy (np. używając []), to otrzymujemy liczbę-obiekt. Numpy automatycznie tworzy nowe obiekty do przechowywania liczb które mają być użyte poza Numpy.&lt;br /&gt;
&lt;br /&gt;
== Specjalne wartości liczbowe ==&lt;br /&gt;
Pakiet Numpy wprowadza też szczególne wartości dla przechowywania nietypowych wyników obliczeń. Należą tutaj takie wartości jak:&lt;br /&gt;
* &amp;lt;tt&amp;gt;inf&amp;lt;/tt&amp;gt; opisująca wartość nieskończoną. Są dostępne również jej następujące warianty: &amp;lt;tt&amp;gt;PINF&amp;lt;/tt&amp;gt; odpowiada wartości +&amp;amp;infin;, natomiast &amp;lt;tt&amp;gt;NINF&amp;lt;/tt&amp;gt; wartości &amp;amp;minus;&amp;amp;infin;. Do sprawdzenia czy badana zmienna &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; zawiera &amp;amp;bdquo;normalną&amp;amp;rdquo; czy nieskończoną wartość używamy funkcji &amp;lt;tt&amp;gt;isfinite(x)&amp;lt;/tt&amp;gt; pakietu Numpy. Zwraca ona &amp;lt;tt&amp;gt;False&amp;lt;/tt&amp;gt; w przypadku napotkania wartości nieskończonej w zmiennej &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;NaN&amp;lt;/tt&amp;gt; opisującą nie-liczbę (przechowywaną w zmiennej liczbowej, NaN to skrót od angielskiego ''not a number''), wartość, która nie reprezentuje żadnej liczby. Wartość taka pojawia się w przypadku próby wykonania pewnych niedozwolonych operacji matematycznych lub sygnalizuje wystąpienie wyniku takiej operacji. Warto tutaj zauważyć, że porównanie &amp;lt;tt&amp;gt;numpy.NaN == numpy.NaN&amp;lt;/tt&amp;gt; daje wynik &amp;lt;tt&amp;gt;False&amp;lt;/tt&amp;gt;. Aby sprawdzić czy mamy do czynienia z taką wartością używamy funkcji &amp;lt;tt&amp;gt;isnan&amp;lt;/tt&amp;gt; pakietu Numpy.&lt;br /&gt;
Jakkolwiek wartości te nie są dostępne w standardowym Pythonie, są one zestandaryzowane i opisane w normie IEEE-754; zapisane w pliku binarnym będą poprawnie interpretowane przez inne programy stosujące się do tej normy.&lt;br /&gt;
&lt;br /&gt;
== Dlaczego warto używać Numpy? ==&lt;br /&gt;
Pierwsza przyczyna, zazwyczaj najmniej istotna, to &amp;lt;b&amp;gt;wydajność&amp;lt;/b&amp;gt;.&lt;br /&gt;
&amp;lt;!--  Premature optimization is the root of all evil. --&amp;gt;&lt;br /&gt;
Jeśli mamy pomnożyć 100 elementów, to szybkość operacji na pojedynczym elemencie nie ma znaczenia. Podobnie jest z rozmiarem pojedynczego elementu. Jeśli elementów jest 10&amp;lt;sup&amp;gt;6&amp;lt;/sup&amp;gt;, to również wtedy narzut nie ma większego znaczenia. Policzmy: 1000000 razy 12 bajtów, to 12 MB. Typowy komputer ma obecnie 1-4 GB pamięci, czyli używamy od 1,2% do 0,27% dostępnej pamięci — jaki problem? Dopiero gdy miejsce zajmowane przez dane jest tego samego rzędu co całość dostępnej pamięci, to czy pojedyncza komórka zajmuje 8 czy 16 bajtów, zaczyna mieć znaczenie.&lt;br /&gt;
&lt;br /&gt;
Druga przyczyna, istotna ze względu na przyjemność pracy, to &amp;lt;b&amp;gt;notacja&amp;lt;/b&amp;gt; obiektowa i infixowa.&lt;br /&gt;
Ta pierwsza to oczywiście „notacja z kropką” — dostęp do metod i atrybutów na obiekcie. Jej użycie, zwłaszcza w połączeniu z dopełnieniem TAB-em upraszcza pisanie.&lt;br /&gt;
Przykład notacji obiektowej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
a.transpose().min()&lt;br /&gt;
# zamiast&lt;br /&gt;
numpy.min(numpy.transpose(a))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Ta druga (infixowa) to stara dobra „notacja matematyczna” — umiejscowienie operatorów dwuargumentowych pomiędzy obiektami na które działają.&lt;br /&gt;
Przykład notacji infixowej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
a + b*c&lt;br /&gt;
# zamiast&lt;br /&gt;
numpy.add(a, numpy.multiply(b, c))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oczywiście notacja obiektowa i infixowa jest używane wszędzie w Pythonie, ale warto wspomnieć, że Numpy od niej nie odchodzi. &lt;br /&gt;
Niemniej Numpy odchodzi od Pythonowej interpretacji niektórych działań. W Pythonie takie operacje jak mnożenie list wywodzą się z działań na ciągach znaków. W obliczeniach numerycznych podstawą są działania na elementach, tak więc w Numpy wszystkie operatory domyślnie działają na indywidualnych parach elementów.&lt;br /&gt;
&lt;br /&gt;
Trzecia przyczyna, chyba najważniejsza, to &amp;lt;b&amp;gt;biblioteka funkcji numerycznych&amp;lt;/b&amp;gt;. Odejście od obiektowości danych pozwala na eksport wartości i komunikację z bibliotekami napisanymi w zupełnie innych językach programowania. Na przykład Scipy może korzystać z biblioteki [http://www.netlib.org/lapack/ LAPACK] (Linear Algebra PACKage, napisanej w Fortranie 77). To że funkcje napisane w różnych językach mogą wymieniać się danymi w pamięci bez skomplikowanego tłumaczenia danych, wynika z faktu, że tak jak to w poprzednim podrozdziale było opisane, ostatecznie wszystkie liczby są w formacie akceptowanym przez procesor.&lt;br /&gt;
&lt;br /&gt;
Możliwość użycia kodu napisanego w C czy Fortranie pozwala na wykorzystanie starych, zoptymalizowanych, sprawdzonych rozwiązań.&lt;br /&gt;
&lt;br /&gt;
;Podsumowanie&lt;br /&gt;
&lt;br /&gt;
Normalnie programista Pythona takie detale, jak ile bitów ma zajmować zmienna, pozostawia całkowicie w gestii interpretera. Niemniej w przypadku obliczeń numerycznych często potrzebna jest silniejsza kontrola. Numpy daje możliwość dokładnej kontroli formatu danych, czyli odejście od pomocniczości powszechnej w Pythonie, pozwalając jednocześnie na gładkie łączenie obliczeń na macierzach z Numpy i normalnych obiektach pythonowych.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
http://groups.google.com/group/comp.lang.python/browse_frm/thread/b33dbedd335e25d2?hl=en&amp;amp;rnum=1&amp;amp;prev=/groups?as_ugroup=comp.lang.python&amp;amp;as_usubject=data%20size&amp;amp;as_scoring=d&amp;amp;hl=en&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zadanka ==&lt;br /&gt;
Zob. zadania z [[TI/Operacje na macierzach|operacji na macierzach]].&lt;/div&gt;</summary>
		<author><name>Rjb</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Pierwsze_kroki&amp;diff=4153</id>
		<title>TI/Pierwsze kroki</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Pierwsze_kroki&amp;diff=4153"/>
		<updated>2015-09-30T16:24:48Z</updated>

		<summary type="html">&lt;p&gt;Rjb: /* Uzyskiwanie pomocy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;W pierwszym kroku nauczymy się uruchamiać w Pythonie tradycyjny* program „Witaj świecie!&amp;quot;. Dzięki temu nauczysz się pisać w języku Python, a także zapisywać i uruchamiać swoje pythonowe programy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;small&amp;gt;Jest taka [http://roesler-ac.de/wolfram/hello.htm tradycja], że za każdym razem, kiedy uczysz się nowego języka programowania, pierwszym programem jest „Witaj świecie!” (w oryginale „Hello World”) — wszystko, co robi, to tylko wypisanie tekstu „Witaj świecie!”.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Są dwa sposoby uruchamiania programów pythonowych: użycie linii poleceń interpretera lub użycie pliku źródłowego. Zobaczmy, w jaki sposób korzystać z tych metod.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Praca z Pythonem ==&lt;br /&gt;
Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:&lt;br /&gt;
* interaktywnie z linii poleceń, &lt;br /&gt;
* zapisując polecenia w pliku tekstowym i wykonując je jako program.&lt;br /&gt;
&lt;br /&gt;
===Używanie linii poleceń interpretera===&lt;br /&gt;
Uruchom interpreter Pythona, wpisując &amp;lt;tt class='shell'&amp;gt;python&amp;lt;/tt&amp;gt; w powłoce {{ang|shell systemowej. Jeśli używasz Linuksa lub BSD, otwórz w tym celu program w rodzaju ''konsole'' czy ''terminal''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt; W przypadku Mac OS X otwórz Terminal (znajdziesz go w: Finder &amp;amp;rarr; Aplikacje &amp;amp;rarr; Użytki &amp;amp;rarr; Terminal), a jeśli używasz Windows, to uruchom (Start &amp;amp;rarr; Uruchom...) &amp;lt;tt class='shell'&amp;gt;cmd&amp;lt;/tt&amp;gt; lub (w przypadku starszych wersji Windows) &amp;lt;tt class='shell'&amp;gt;command&amp;lt;/tt&amp;gt; albo po prostu znajdź odpowiednią pozycję w menu.&lt;br /&gt;
&lt;br /&gt;
Zauważ, że w przypadku Windows musisz zadbać o poprawnie ustawioną zmienną PATH. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teraz wpisz &amp;lt;tt&amp;gt;print('Witaj świecie!')&amp;lt;/tt&amp;gt; i wciśnij Enter. Na ekranie powinien pojawić się napis &amp;lt;tt&amp;gt;Witaj świecie!&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
$ python3&lt;br /&gt;
Python 3.4.3+ (default, Sep 23 2015, 17:53:22) &lt;br /&gt;
[GCC 5.2.1 20150922] on linux&lt;br /&gt;
Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print('Witaj świecie!')&lt;br /&gt;
Witaj świecie!&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uwaga:&lt;br /&gt;
:Napis: &amp;lt;tt&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/tt&amp;gt; oznacza, że Python oczekuje na wprowadzenie polecenia.  Z ang. nazywa się to ''prompt''.&lt;br /&gt;
&lt;br /&gt;
Zobacz, Python natychmiast zwraca wynik! To, co właśnie wprowadziłeś, to pojedyncze polecenie Pythona. Używamy &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt; (ang. drukuj, wypisz), aby wypisać to, co mu podamy. W naszym przypadku podaliśmy tekst &amp;lt;tt&amp;gt;Witaj świecie!&amp;lt;/tt&amp;gt; i został on natychmiast wyświetlony na ekranie. Nawiasy po słowie &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt; oznaczają, że mamy do czynienia&lt;br /&gt;
z nazwą ''funkcji'', a to, co umieszczamy wewnątrz tych nawiasów, jest ''argumentem wywołania'' tej funkcji. Umieszczenie&lt;br /&gt;
napisu &amp;lt;tt&amp;gt;'Witaj świecie'&amp;lt;/tt&amp;gt; w parze apostrofów oznacza, że słowa te nie mają być traktowane jako nazwy czegokolwiek,&lt;br /&gt;
tylko całość ma być traktowana jako dosłowna treść. Argumentów w nawiasach wywołania funkcji może być więcej, wtedy są one oddzielone przecinkami.&lt;br /&gt;
&lt;br /&gt;
Jak wyjść z interpretera?&lt;br /&gt;
* Jeśli używasz powłoki systemowej Linuksa/BSD/Mac OS X, wciśnij po prostu Ctrl-D.&lt;br /&gt;
* Jeśli używasz Pythona w linii poleceń Windows, naciśnij Ctrl-Z, a następnie Enter.&lt;br /&gt;
* Możesz też napisać &amp;lt;tt&amp;gt;exit()&amp;lt;/tt&amp;gt; - tak, jest to również wywołanie funkcji, tyle że lista jej argumentów jest pusta.&lt;br /&gt;
&lt;br /&gt;
===Pliki źródłowe===&lt;br /&gt;
Wróćmy wreszcie do programowania.  &lt;br /&gt;
&lt;br /&gt;
;Jak pisać programy w Pythonie? &lt;br /&gt;
:Od tego momentu nasza standardowa procedura zapisu i uruchamianiu programów w Pythonie będzie wyglądała następująco:&lt;br /&gt;
# Otwórz swój ulubiony edytor tekstu&lt;br /&gt;
# Wprowadź/Skopiuj kod programu podany w przykładzie.&lt;br /&gt;
# Zapisz plik pod nazwą podaną w komentarzu. Przyjmijmy, że programy Pythona będziemy zapisywali z rozszerzeniem &amp;lt;tt class='shell'&amp;gt;.py&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# Teraz możesz uruchomić program jedną z poniższych metod:&lt;br /&gt;
* w powłoce systemowej za pomocą polecenia &amp;lt;tt class='shell'&amp;gt;python3 nazwa.py&amp;lt;/tt&amp;gt;, gdzie &amp;lt;tt class='shell'&amp;gt;nazwa&amp;lt;/tt&amp;gt; jest nazwą pliku &lt;br /&gt;
* wpisz &amp;lt;tt&amp;gt;execfile('nazwa.py')&amp;lt;/tt&amp;gt; w lini poleceń interpretera, aby uruchomić program. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Uruchom swój edytor, wpisz poniższy program i zapisz go pod nazwą &amp;lt;tt class='shell'&amp;gt;witaj.py&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Nazwa pliku: witaj.py&lt;br /&gt;
 &lt;br /&gt;
print('Witaj świecie!')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uruchom program, otwierając powłokę, przechodząc do odpowiedniego katalogu i wykonując w nim polecenie &amp;lt;tt class='shell'&amp;gt;python3 witaj.py&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Wynik powinien przypominać:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
$ python witaj.py&lt;br /&gt;
Witaj świecie!&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gratuluję, jeśli wynik jest podobny powyższego! Właśnie uruchomiłeś swój pierwszy program w Pythonie.&lt;br /&gt;
&lt;br /&gt;
Jeśli wystąpił błąd, przepisz program tak, żeby wyglądał dokładnie tak, jak powyższy i spróbuj uruchomić go jeszcze raz. Zwróć uwagę na to, że Python rozróżnia wielkość liter, np. &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt; znaczy co innego, niż &amp;lt;tt&amp;gt;Print&amp;lt;/tt&amp;gt; (zauważ wielkie &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt; w drugim). Upewnij się także, że nie ma żadnych spacji ani też znaków tabulacji na początku jakiejkolwiek linii (za moment dowiesz się, dlaczego jest to takie jest istotne).&lt;br /&gt;
&lt;br /&gt;
=== Jak to działa? ===&lt;br /&gt;
Zacznijmy od przeanalizowania pierwszej linii naszego programu. Jest to tak zwany ''komentarz''. Wszystko, co znajduje się na prawo od znaku &amp;lt;tt&amp;gt;#&amp;lt;/tt&amp;gt; jest pomijane w trakcie wykonywania programu i przydaje się przede wszystkim jako notatki pozostawione dla przyszłego czytelnika programu.&lt;br /&gt;
Python nie interpretuje komentarzy.&lt;br /&gt;
&lt;br /&gt;
Program w Pythonie możesz uruchomić wpisując polecenie, nazwę interpretera i pliku, czyli&lt;br /&gt;
tak jak w naszym poprzednim przykładzie, &amp;lt;tt&amp;gt;python3 witaj.py&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Uwaga o komentarzach'''&lt;br /&gt;
: Komentarze są ważne, ponieważ pomagają wprowadzać szczegółowe notatki związane z programem. Powinny one wyjaśniać, ''co'' program wykonuje, albo też informować o rzeczach, które czekają na poprawienie/dokończenie/zrobienie. Mogą się one okazać bardzo przydatne dla osób, które będą czytały Twój program. Również Tobie z pewnością się przydadzą, kiedy na przykład będziesz czytał swój program sześć miesięcy po jego napisaniu.&lt;br /&gt;
&lt;br /&gt;
W naszym pierwszym programie po komentarzach następuje ''polecenie'' Pythona, które wypisuje na ekran słowa &amp;lt;tt&amp;gt;Witaj świecie!&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt; jest nazwą funkcji, a dostarczone przez nas w nawiasach &amp;lt;tt&amp;gt;'Witaj świecie!'&amp;lt;/tt&amp;gt; jest napisem (ang. ''string''). Wyjaśnimy tę terminologię później.&lt;br /&gt;
&lt;br /&gt;
===Wcięcia===&lt;br /&gt;
Przez znaki niewidoczne rozumiemy spację, tabulator itp. Rozpoczęcie od nich linii tekstu nazywamy ''wcięciem'' linii. Znaki niewidoczne znajdujące się na początku linii są w języku Python bardzo istotne. Spacje i znaki tabulacji na początku linii są brane pod uwagę przy określaniu stopnia wcięcia danej linii, co z kolei pozwala Pythonowi grupować polecenia. Polecenia, które są tak samo wcięte tworzą ''blok poleceń''. &lt;br /&gt;
&lt;br /&gt;
Powinieneś również zapamiętać, że nieprawidłowe wcięcia pociągają za sobą czasem trudne do znalezienia błędy. Spójrz na ten przykład:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Nazwa pliku: wciecia.py&lt;br /&gt;
&lt;br /&gt;
i = 5&lt;br /&gt;
 print('Wartość zmiennej to', i) # Błąd! Zauważ spację na początku linii&lt;br /&gt;
print('Powtarzam, wartość zmiennej to', i)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Próbując uruchomić powyższy program, prawdopodobnie otrzymasz następujący błąd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  File &amp;quot;wciecia.py&amp;quot;, line 4&lt;br /&gt;
    print 'Wartość zmiennej to ', i # Błąd! Zauważ spację na początku linii&lt;br /&gt;
    ^&lt;br /&gt;
IndentationError: unexpected indent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python podpowiada, że we wskazanej linii znajduje się nieoczekiwane wcięcie. ''Nie można dowolnie zaczynać nowych bloków poleceń''. Sytuacje, w których możesz rozpoczynać nowe bloki, zostaną opisane w następnych rozdziałach.&lt;br /&gt;
&lt;br /&gt;
Miłą konsekwencją stosowania wcięć jest to, że w ten sposób Python zmusza nas do pisania bardziej schludnego kodu, który jest bardziej przejrzysty dla czytelnika.&lt;br /&gt;
&lt;br /&gt;
;Jak używać wcięć?&lt;br /&gt;
:Nie używaj mieszaniny tabulatorów i spacji do stosowania wcięć, ponieważ nie działa to prawidłowo na wszystkich platformach. ''Zdecydowanie polecam'' żebyś używał ''pojedynczego tabulatora'' lub ''czterech spacji'' na każdy jeden stopień wcięcia.&lt;br /&gt;
&lt;br /&gt;
Wybierz jeden z powyższych sposobów stosowania wcięć i stale używaj tylko tego sposobu.&lt;br /&gt;
====Zadanie==== Proszę wypróbować samodzielnie powyższy przykład&lt;br /&gt;
&lt;br /&gt;
=== Programy wykonywalne w Pythonie (na potem) ===&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
Można spowodować, by program w Pythonie zachowywał się jak każdy inny program, tzn. żeby można było go uruchomić podając jedynie jego nazwę.&lt;br /&gt;
Zob. [[TI\Wykonywalne programy w Pythonie]].&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Uzyskiwanie pomocy ==&lt;br /&gt;
Jeśli szybko musisz znaleźć opis funkcji lub polecenia Pythona, możesz skorzystać z wbudowanej pomocy (ang. ''help''). Przydaje się to szczególnie podczas używania wiersza poleceń interpretera. Dla przykładu możesz wykonać &amp;lt;tt&amp;gt;help('string')&amp;lt;/tt&amp;gt;, a uzyskasz pomoc odnośnie napisów.&lt;br /&gt;
&lt;br /&gt;
;Uwaga&lt;br /&gt;
:Aby zakończyć pomoc, wciśnij &amp;lt;tt&amp;gt;q&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
W podobny sposób możesz uzyskać informacje na temat niemal wszystkiego, co dotyczy Pythona. By dowiedzieć się więcej o samej pomocy, użyj &amp;lt;tt&amp;gt;help()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
$ python3&lt;br /&gt;
Python 3.4.3+ (default, Sep 23 2015, 17:53:22) &lt;br /&gt;
[GCC 5.2.1 20150922] on linux&lt;br /&gt;
Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; help(print)&lt;br /&gt;
...{tu się pojawi jakaś odpowiedź}&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; help(if)&lt;br /&gt;
  File &amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;, line 1&lt;br /&gt;
    help(if)&lt;br /&gt;
          ^&lt;br /&gt;
SyntaxError: invalid syntax&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; help('if')&lt;br /&gt;
...{znów się czegoś dowiemy}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zauważ, że musimy użyć apostrofów i zapytać o &amp;lt;tt&amp;gt;'if'&amp;lt;/tt&amp;gt;, bo &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt; jest tzw. słowem kluczowym i nie może być użyte jako argument do wywołania funkcji &amp;lt;tt&amp;gt;help&amp;lt;/tt&amp;gt;. Nie ma to miejsca w przypadku słowa &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt;, gdyż jak już podkreślaliśmy jest ono nazwą funkcji. Więcej na temat tego rozróżnienia będzie później.&lt;br /&gt;
&amp;lt;!-- za wcześnie żeby wyjaśniać różnicę pomiędzy funkcją i słowem kluczowym --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Podsumowanie i  ćwiczenia==&lt;br /&gt;
====Zadania====&lt;br /&gt;
# Napisz program powitalny&lt;br /&gt;
# Wyświetl pomoc na temat &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Wyświetl pomoc na temat &amp;lt;tt&amp;gt;'print'&amp;lt;/tt&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rjb</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/Pierwsze_kroki&amp;diff=4152</id>
		<title>TI/Pierwsze kroki</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/Pierwsze_kroki&amp;diff=4152"/>
		<updated>2015-09-30T16:21:08Z</updated>

		<summary type="html">&lt;p&gt;Rjb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;W pierwszym kroku nauczymy się uruchamiać w Pythonie tradycyjny* program „Witaj świecie!&amp;quot;. Dzięki temu nauczysz się pisać w języku Python, a także zapisywać i uruchamiać swoje pythonowe programy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;small&amp;gt;Jest taka [http://roesler-ac.de/wolfram/hello.htm tradycja], że za każdym razem, kiedy uczysz się nowego języka programowania, pierwszym programem jest „Witaj świecie!” (w oryginale „Hello World”) — wszystko, co robi, to tylko wypisanie tekstu „Witaj świecie!”.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Są dwa sposoby uruchamiania programów pythonowych: użycie linii poleceń interpretera lub użycie pliku źródłowego. Zobaczmy, w jaki sposób korzystać z tych metod.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Praca z Pythonem ==&lt;br /&gt;
Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:&lt;br /&gt;
* interaktywnie z linii poleceń, &lt;br /&gt;
* zapisując polecenia w pliku tekstowym i wykonując je jako program.&lt;br /&gt;
&lt;br /&gt;
===Używanie linii poleceń interpretera===&lt;br /&gt;
Uruchom interpreter Pythona, wpisując &amp;lt;tt class='shell'&amp;gt;python&amp;lt;/tt&amp;gt; w powłoce {{ang|shell systemowej. Jeśli używasz Linuksa lub BSD, otwórz w tym celu program w rodzaju ''konsole'' czy ''terminal''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt; W przypadku Mac OS X otwórz Terminal (znajdziesz go w: Finder &amp;amp;rarr; Aplikacje &amp;amp;rarr; Użytki &amp;amp;rarr; Terminal), a jeśli używasz Windows, to uruchom (Start &amp;amp;rarr; Uruchom...) &amp;lt;tt class='shell'&amp;gt;cmd&amp;lt;/tt&amp;gt; lub (w przypadku starszych wersji Windows) &amp;lt;tt class='shell'&amp;gt;command&amp;lt;/tt&amp;gt; albo po prostu znajdź odpowiednią pozycję w menu.&lt;br /&gt;
&lt;br /&gt;
Zauważ, że w przypadku Windows musisz zadbać o poprawnie ustawioną zmienną PATH. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teraz wpisz &amp;lt;tt&amp;gt;print('Witaj świecie!')&amp;lt;/tt&amp;gt; i wciśnij Enter. Na ekranie powinien pojawić się napis &amp;lt;tt&amp;gt;Witaj świecie!&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
$ python3&lt;br /&gt;
Python 3.4.3+ (default, Sep 23 2015, 17:53:22) &lt;br /&gt;
[GCC 5.2.1 20150922] on linux&lt;br /&gt;
Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print('Witaj świecie!')&lt;br /&gt;
Witaj świecie!&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uwaga:&lt;br /&gt;
:Napis: &amp;lt;tt&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/tt&amp;gt; oznacza, że Python oczekuje na wprowadzenie polecenia.  Z ang. nazywa się to ''prompt''.&lt;br /&gt;
&lt;br /&gt;
Zobacz, Python natychmiast zwraca wynik! To, co właśnie wprowadziłeś, to pojedyncze polecenie Pythona. Używamy &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt; (ang. drukuj, wypisz), aby wypisać to, co mu podamy. W naszym przypadku podaliśmy tekst &amp;lt;tt&amp;gt;Witaj świecie!&amp;lt;/tt&amp;gt; i został on natychmiast wyświetlony na ekranie. Nawiasy po słowie &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt; oznaczają, że mamy do czynienia&lt;br /&gt;
z nazwą ''funkcji'', a to, co umieszczamy wewnątrz tych nawiasów, jest ''argumentem wywołania'' tej funkcji. Umieszczenie&lt;br /&gt;
napisu &amp;lt;tt&amp;gt;'Witaj świecie'&amp;lt;/tt&amp;gt; w parze apostrofów oznacza, że słowa te nie mają być traktowane jako nazwy czegokolwiek,&lt;br /&gt;
tylko całość ma być traktowana jako dosłowna treść. Argumentów w nawiasach wywołania funkcji może być więcej, wtedy są one oddzielone przecinkami.&lt;br /&gt;
&lt;br /&gt;
Jak wyjść z interpretera?&lt;br /&gt;
* Jeśli używasz powłoki systemowej Linuksa/BSD/Mac OS X, wciśnij po prostu Ctrl-D.&lt;br /&gt;
* Jeśli używasz Pythona w linii poleceń Windows, naciśnij Ctrl-Z, a następnie Enter.&lt;br /&gt;
* Możesz też napisać &amp;lt;tt&amp;gt;exit()&amp;lt;/tt&amp;gt; - tak, jest to również wywołanie funkcji, tyle że lista jej argumentów jest pusta.&lt;br /&gt;
&lt;br /&gt;
===Pliki źródłowe===&lt;br /&gt;
Wróćmy wreszcie do programowania.  &lt;br /&gt;
&lt;br /&gt;
;Jak pisać programy w Pythonie? &lt;br /&gt;
:Od tego momentu nasza standardowa procedura zapisu i uruchamianiu programów w Pythonie będzie wyglądała następująco:&lt;br /&gt;
# Otwórz swój ulubiony edytor tekstu&lt;br /&gt;
# Wprowadź/Skopiuj kod programu podany w przykładzie.&lt;br /&gt;
# Zapisz plik pod nazwą podaną w komentarzu. Przyjmijmy, że programy Pythona będziemy zapisywali z rozszerzeniem &amp;lt;tt class='shell'&amp;gt;.py&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# Teraz możesz uruchomić program jedną z poniższych metod:&lt;br /&gt;
* w powłoce systemowej za pomocą polecenia &amp;lt;tt class='shell'&amp;gt;python3 nazwa.py&amp;lt;/tt&amp;gt;, gdzie &amp;lt;tt class='shell'&amp;gt;nazwa&amp;lt;/tt&amp;gt; jest nazwą pliku &lt;br /&gt;
* wpisz &amp;lt;tt&amp;gt;execfile('nazwa.py')&amp;lt;/tt&amp;gt; w lini poleceń interpretera, aby uruchomić program. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Uruchom swój edytor, wpisz poniższy program i zapisz go pod nazwą &amp;lt;tt class='shell'&amp;gt;witaj.py&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Nazwa pliku: witaj.py&lt;br /&gt;
 &lt;br /&gt;
print('Witaj świecie!')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uruchom program, otwierając powłokę, przechodząc do odpowiedniego katalogu i wykonując w nim polecenie &amp;lt;tt class='shell'&amp;gt;python3 witaj.py&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Wynik powinien przypominać:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
$ python witaj.py&lt;br /&gt;
Witaj świecie!&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Gratuluję, jeśli wynik jest podobny powyższego! Właśnie uruchomiłeś swój pierwszy program w Pythonie.&lt;br /&gt;
&lt;br /&gt;
Jeśli wystąpił błąd, przepisz program tak, żeby wyglądał dokładnie tak, jak powyższy i spróbuj uruchomić go jeszcze raz. Zwróć uwagę na to, że Python rozróżnia wielkość liter, np. &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt; znaczy co innego, niż &amp;lt;tt&amp;gt;Print&amp;lt;/tt&amp;gt; (zauważ wielkie &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt; w drugim). Upewnij się także, że nie ma żadnych spacji ani też znaków tabulacji na początku jakiejkolwiek linii (za moment dowiesz się, dlaczego jest to takie jest istotne).&lt;br /&gt;
&lt;br /&gt;
=== Jak to działa? ===&lt;br /&gt;
Zacznijmy od przeanalizowania pierwszej linii naszego programu. Jest to tak zwany ''komentarz''. Wszystko, co znajduje się na prawo od znaku &amp;lt;tt&amp;gt;#&amp;lt;/tt&amp;gt; jest pomijane w trakcie wykonywania programu i przydaje się przede wszystkim jako notatki pozostawione dla przyszłego czytelnika programu.&lt;br /&gt;
Python nie interpretuje komentarzy.&lt;br /&gt;
&lt;br /&gt;
Program w Pythonie możesz uruchomić wpisując polecenie, nazwę interpretera i pliku, czyli&lt;br /&gt;
tak jak w naszym poprzednim przykładzie, &amp;lt;tt&amp;gt;python3 witaj.py&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Uwaga o komentarzach'''&lt;br /&gt;
: Komentarze są ważne, ponieważ pomagają wprowadzać szczegółowe notatki związane z programem. Powinny one wyjaśniać, ''co'' program wykonuje, albo też informować o rzeczach, które czekają na poprawienie/dokończenie/zrobienie. Mogą się one okazać bardzo przydatne dla osób, które będą czytały Twój program. Również Tobie z pewnością się przydadzą, kiedy na przykład będziesz czytał swój program sześć miesięcy po jego napisaniu.&lt;br /&gt;
&lt;br /&gt;
W naszym pierwszym programie po komentarzach następuje ''polecenie'' Pythona, które wypisuje na ekran słowa &amp;lt;tt&amp;gt;Witaj świecie!&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt; jest nazwą funkcji, a dostarczone przez nas w nawiasach &amp;lt;tt&amp;gt;'Witaj świecie!'&amp;lt;/tt&amp;gt; jest napisem (ang. ''string''). Wyjaśnimy tę terminologię później.&lt;br /&gt;
&lt;br /&gt;
===Wcięcia===&lt;br /&gt;
Przez znaki niewidoczne rozumiemy spację, tabulator itp. Rozpoczęcie od nich linii tekstu nazywamy ''wcięciem'' linii. Znaki niewidoczne znajdujące się na początku linii są w języku Python bardzo istotne. Spacje i znaki tabulacji na początku linii są brane pod uwagę przy określaniu stopnia wcięcia danej linii, co z kolei pozwala Pythonowi grupować polecenia. Polecenia, które są tak samo wcięte tworzą ''blok poleceń''. &lt;br /&gt;
&lt;br /&gt;
Powinieneś również zapamiętać, że nieprawidłowe wcięcia pociągają za sobą czasem trudne do znalezienia błędy. Spójrz na ten przykład:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Nazwa pliku: wciecia.py&lt;br /&gt;
&lt;br /&gt;
i = 5&lt;br /&gt;
 print('Wartość zmiennej to', i) # Błąd! Zauważ spację na początku linii&lt;br /&gt;
print('Powtarzam, wartość zmiennej to', i)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Próbując uruchomić powyższy program, prawdopodobnie otrzymasz następujący błąd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  File &amp;quot;wciecia.py&amp;quot;, line 4&lt;br /&gt;
    print 'Wartość zmiennej to ', i # Błąd! Zauważ spację na początku linii&lt;br /&gt;
    ^&lt;br /&gt;
IndentationError: unexpected indent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python podpowiada, że we wskazanej linii znajduje się nieoczekiwane wcięcie. ''Nie można dowolnie zaczynać nowych bloków poleceń''. Sytuacje, w których możesz rozpoczynać nowe bloki, zostaną opisane w następnych rozdziałach.&lt;br /&gt;
&lt;br /&gt;
Miłą konsekwencją stosowania wcięć jest to, że w ten sposób Python zmusza nas do pisania bardziej schludnego kodu, który jest bardziej przejrzysty dla czytelnika.&lt;br /&gt;
&lt;br /&gt;
;Jak używać wcięć?&lt;br /&gt;
:Nie używaj mieszaniny tabulatorów i spacji do stosowania wcięć, ponieważ nie działa to prawidłowo na wszystkich platformach. ''Zdecydowanie polecam'' żebyś używał ''pojedynczego tabulatora'' lub ''czterech spacji'' na każdy jeden stopień wcięcia.&lt;br /&gt;
&lt;br /&gt;
Wybierz jeden z powyższych sposobów stosowania wcięć i stale używaj tylko tego sposobu.&lt;br /&gt;
====Zadanie==== Proszę wypróbować samodzielnie powyższy przykład&lt;br /&gt;
&lt;br /&gt;
=== Programy wykonywalne w Pythonie (na potem) ===&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
Można spowodować, by program w Pythonie zachowywał się jak każdy inny program, tzn. żeby można było go uruchomić podając jedynie jego nazwę.&lt;br /&gt;
Zob. [[TI\Wykonywalne programy w Pythonie]].&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Uzyskiwanie pomocy ==&lt;br /&gt;
Jeśli szybko musisz znaleźć opis funkcji lub polecenia Pythona, możesz skorzystać z wbudowanej pomocy (ang. ''help''). Przydaje się to szczególnie podczas używania wiersza poleceń interpretera. Dla przykładu możesz wykonać &amp;lt;tt&amp;gt;help('string')&amp;lt;/tt&amp;gt;, a uzyskasz pomoc odnośnie napisów.&lt;br /&gt;
&lt;br /&gt;
;Uwaga&lt;br /&gt;
:Aby zakończyć pomoc, wciśnij &amp;lt;tt&amp;gt;q&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
W podobny sposób możesz uzyskać informacje na temat niemal wszystkiego, co dotyczy Pythona. By dowiedzieć się więcej o samej pomocy, użyj &amp;lt;tt&amp;gt;help()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
$ python3&lt;br /&gt;
Python 3.4.3+ (default, Sep 23 2015, 17:53:22) &lt;br /&gt;
[GCC 5.2.1 20150922] on linux&lt;br /&gt;
Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; help(print)&lt;br /&gt;
...&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; help(if)&lt;br /&gt;
  File &amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;, line 1&lt;br /&gt;
    help(if)&lt;br /&gt;
          ^&lt;br /&gt;
SyntaxError: invalid syntax&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; help('if')&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zauważ, że musimy użyć apostrofów i zapytać o &amp;lt;tt&amp;gt;'if'&amp;lt;/tt&amp;gt;, bo &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt; jest tzw. słowem kluczowym i nie może być użyte jako argument do wywołania funkcji &amp;lt;tt&amp;gt;help&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&amp;lt;!-- za wcześnie żeby wyjaśniać różnicę pomiędzy funkcją i słowem kluczowym --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Podsumowanie i  ćwiczenia==&lt;br /&gt;
====Zadania====&lt;br /&gt;
# Napisz program powitalny&lt;br /&gt;
# Wyświetl pomoc na temat &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Wyświetl pomoc na temat &amp;lt;tt&amp;gt;'print'&amp;lt;/tt&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rjb</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%22Programowanie_z_Pythonem%22&amp;diff=4098</id>
		<title>&quot;Programowanie z Pythonem&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%22Programowanie_z_Pythonem%22&amp;diff=4098"/>
		<updated>2015-09-29T15:36:29Z</updated>

		<summary type="html">&lt;p&gt;Rjb: /* Semestr zimowy 2015/16 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Informatyka]]&lt;br /&gt;
==Semestr zimowy 2015/16==&lt;br /&gt;
Dotychczasowe notatki, pochodzące z lat poprzednich, będą sukcesywnie uaktualniane w trakcie semestru. Notatki odnoszące się do przyszłych - jeszcze nie przerobionych tematów nie zostały jeszcze przejrzane i mogą być nieaktualne!&lt;br /&gt;
&lt;br /&gt;
===Uwagi ogólne===&lt;br /&gt;
Od bieżącego roku przechodzimy na Pythona 3 (dotąd: wersja 2.x). W pracowniach OKWF zainstalowane są obie wersje;&lt;br /&gt;
aktualnie &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt; uruchamia wersję 2.7, w celu uruchomienia Pythona 3 należy pisać &amp;lt;tt&amp;gt;python3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Zasady zaliczenia ćwiczeń w roku 2015/16:&lt;br /&gt;
&lt;br /&gt;
* maksymalnie można zdobyć 50 punktów&lt;br /&gt;
* w semestrze będą dwa kolokwia, w połowie i pod koniec; na każdym można zdobyć po 15 punktów&lt;br /&gt;
* w sesji będzie kolokwium dodatkowe, dla chętnych; wynik z niego (maks. 15 punktów) zastępuje gorszy z wyników kolokwiów z semestru, o ile jest on niego lepszy&lt;br /&gt;
* za &amp;quot;kartkówki&amp;quot; (co drugie zajęcia mniej więcej) można zdobyć maks. 10 punktów; kartkówka to proste zadanie, z rozwiązaniem mieszczącym się maksymalnie w 10-15 linijkach kodu, do wykonania w nie więcej niż 20 minut&lt;br /&gt;
* maksymalnie 10 punktów przydziela prowadzący za aktywność na ćwiczeniach&lt;br /&gt;
* zaliczenie ćwiczeń na pozytywną ocenę wymaga co najmniej 50% punktów (25 p.)&lt;br /&gt;
* ocena rośnie o pół stopnia z osiągnięciem progu każdych kolejnych 10% punktów.&lt;br /&gt;
&lt;br /&gt;
Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są '''dwie''' nieobecności nieusprawiedliwione w semestrze. '''Za każdą kolejną nieobecność nieusprawiedliwioną powyżej dwóch odejmujemy od wyniku 5 punktów.'''&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu składa się z oceny z ćwiczeń, oraz z oceny z egzaminu testowego kończącego wykład, w proporcji 3:2 - z tym, że '''obie te oceny cząstkowe muszą być pozytywne''' aby ocena z całości była pozytywna.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[TI/Programowanie_z_Pythonem/Zadania_powtorzeniowe|Zadania powtórzeniowe do I kolokwium]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# [[TI/Wprowadzenie|Wprowadzenie]] &lt;br /&gt;
#[[TI/Pierwsze kroki|Pierwsze kroki]] &lt;br /&gt;
#[[TI/Stałe i zmienne|Stałe i zmienne]]&lt;br /&gt;
#[[TI/Wykonanie warunkowe|Wykonanie warunkowe]]&lt;br /&gt;
#[[TI/Pętle| Pętle]]&lt;br /&gt;
#[[TI/Funkcje| Funkcje]]&lt;br /&gt;
#[[TI/Moduły| Moduły]]&lt;br /&gt;
#[[TI/Sekwencje|Struktury danych — sekwencje]]&lt;br /&gt;
#[[TI/Słowniki i zbiory|Struktury danych — słowniki i zbiory]] &lt;br /&gt;
#[[TI/Numpy|Biblioteka numeryczna numpy]]&lt;br /&gt;
#[[TI/Matplotlib|Biblioteka graficzna matplotlib]]&lt;br /&gt;
#[[TI/Wejście i wyjście|Obsługa wejścia i wyjścia]] &lt;br /&gt;
#[[TI/Wyjątki|Wyjątki]] &lt;br /&gt;
#[[TI/Wybrane zagadnienia numeryczne|Wybrane zagadnienia numeryczne]]&lt;br /&gt;
#[[TI/Zadania dodatkowe|Zadania dodatkowe]]&lt;br /&gt;
&lt;br /&gt;
==O skrypcie==&lt;br /&gt;
&lt;br /&gt;
Podręcznik „Programowanie z Pythonem“ powstał na podstawie:&lt;br /&gt;
*książki [http://www.swaroopch.com/notes/Python A Byte of Python] autorstwa Swaroop C H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nowe rozdziały i wiele poprawek zostały napisane przez Jarosława Żygierewicza, Maćka Kamińskiego, Zbyszka J-Szmeka.&lt;br /&gt;
&lt;br /&gt;
Dodatkowo wykorzystane materiały:&lt;br /&gt;
&lt;br /&gt;
*en.wikibooks.org, [http://en.wikibooks.org/wiki/Non-Programmer%27s_Tutorial_for_Python_2.0 Non-Programmer's Tutorial for Python 2.0]/ [http://en.wikibooks.org/wiki/Non-Programmer%27s_Tutorial_for_Python_2.0/Revenge_of_the_Strings Revenge of the Strings], Josh Cogliati i współautorzy&lt;br /&gt;
*CreativeCommons, [http://commons.wikimedia.org/wiki/File:Albino_ball_python.png File:Albino ball python.png], autorstwa WingedWolfPsion&lt;br /&gt;
&lt;br /&gt;
Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;a rel=&amp;quot;license&amp;quot; href=&amp;quot;http://creativecommons.org/licenses/by-sa/3.0/pl/&amp;quot;&amp;gt;&amp;lt;img alt=&amp;quot;Creative Commons License&amp;quot; style=&amp;quot;border-width:0&amp;quot; src=&amp;quot;http://i.creativecommons.org/l/by-sa/3.0/pl/88x31.png&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot; href=&amp;quot;http://purl.org/dc/dcmitype/Text&amp;quot; property=&amp;quot;dc:title&amp;quot; rel=&amp;quot;dc:type&amp;quot;&amp;gt;Programowanie z Pythonem&amp;lt;/span&amp;gt; by &amp;lt;a xmlns:cc=&amp;quot;http://creativecommons.org/ns#&amp;quot; href=&amp;quot;http://bci.fuw.edu.pl/edu&amp;quot; property=&amp;quot;cc:attributionName&amp;quot; rel=&amp;quot;cc:attributionURL&amp;quot;&amp;gt;http://bci.fuw.edu.pl/edu&amp;lt;/a&amp;gt; is licensed under a &amp;lt;a rel=&amp;quot;license&amp;quot; href=&amp;quot;http://creativecommons.org/licenses/by-sa/3.0/pl/&amp;quot;&amp;gt;Creative Commons Attribution-Share Alike 3.0 Poland License&amp;lt;/a&amp;gt;.&amp;lt;br /&amp;gt;Based on a work at &amp;lt;a xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot; href=&amp;quot;http://wiki.lo5.bielsko.pl/index.php&amp;quot; rel=&amp;quot;dc:source&amp;quot;&amp;gt;wiki.lo5.bielsko.pl&amp;lt;/a&amp;gt;.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rjb</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%22Programowanie_z_Pythonem%22&amp;diff=4097</id>
		<title>&quot;Programowanie z Pythonem&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%22Programowanie_z_Pythonem%22&amp;diff=4097"/>
		<updated>2015-09-29T15:17:01Z</updated>

		<summary type="html">&lt;p&gt;Rjb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Informatyka]]&lt;br /&gt;
==Semestr zimowy 2015/16==&lt;br /&gt;
Dotychczasowe notatki, pochodzące z lat poprzednich, będą sukcesywnie uaktualniane w trakcie semestru. Notatki odnoszące się do przyszłych - jeszcze nie przerobionych tematów nie zostały jeszcze przejrzane i mogą być nieaktualne!&lt;br /&gt;
&lt;br /&gt;
===Uwagi ogólne===&lt;br /&gt;
Od bieżącego roku przechodzimy na Pythona 3 (dotąd: wersja 2.x). W pracowniach OKWF zainstalowane są obie wersje;&lt;br /&gt;
aktualnie &amp;lt;tt&amp;gt;python&amp;lt;/tt&amp;gt; uruchamia wersję 2.7, w celu uruchomienia Pythona 3 należy pisać &amp;lt;tt&amp;gt;python3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Zasady zaliczenia ćwiczeń w roku 2015/16:&lt;br /&gt;
&lt;br /&gt;
* maksymalnie można zdobyć 50 punktów&lt;br /&gt;
* w semestrze będą dwa kolokwia, w połowie i pod koniec; na każdym można zdobyć po 15 punktów&lt;br /&gt;
* w sesji będzie kolokwium dodatkowe, dla chętnych; wynik z niego (maks. 15 punktów) zastępuje gorszy z wyników kolokwiów z semestru, o ile jest on niego lepszy&lt;br /&gt;
* za &amp;quot;kartkówki&amp;quot; (co drugie zajęcia mniej więcej) można zdobyć maks. 10 punktów; kartkówka to proste zadanie, z rozwiązaniem mieszczącym się maksymalnie w 10-15 linijkach kodu&lt;br /&gt;
* maksymalnie 10 punktów przydziela prowadzący za aktywność na ćwiczeniach&lt;br /&gt;
* zaliczenie ćwiczeń na pozytywną ocenę wymaga co najmniej 50% punktów (25 p.)&lt;br /&gt;
* ocena rośnie o pół stopnia z osiągnięciem progu każdych kolejnych 10% punktów.&lt;br /&gt;
&lt;br /&gt;
Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są '''dwie''' nieobecności nieusprawiedliwione w semestrze. '''Za każdą kolejną nieobecność nieusprawiedliwioną powyżej dwóch odejmujemy od wyniku 5 punktów.'''&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu składa się z oceny z ćwiczeń, oraz z oceny z egzaminu testowego kończącego wykład, w proporcji 3:2 - z tym, że '''obie te oceny cząstkowe muszą być pozytywne''' aby ocena z całości była pozytywna.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[TI/Programowanie_z_Pythonem/Zadania_powtorzeniowe|Zadania powtórzeniowe do I kolokwium]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# [[TI/Wprowadzenie|Wprowadzenie]] &lt;br /&gt;
#[[TI/Pierwsze kroki|Pierwsze kroki]] &lt;br /&gt;
#[[TI/Stałe i zmienne|Stałe i zmienne]]&lt;br /&gt;
#[[TI/Wykonanie warunkowe|Wykonanie warunkowe]]&lt;br /&gt;
#[[TI/Pętle| Pętle]]&lt;br /&gt;
#[[TI/Funkcje| Funkcje]]&lt;br /&gt;
#[[TI/Moduły| Moduły]]&lt;br /&gt;
#[[TI/Sekwencje|Struktury danych — sekwencje]]&lt;br /&gt;
#[[TI/Słowniki i zbiory|Struktury danych — słowniki i zbiory]] &lt;br /&gt;
#[[TI/Numpy|Biblioteka numeryczna numpy]]&lt;br /&gt;
#[[TI/Matplotlib|Biblioteka graficzna matplotlib]]&lt;br /&gt;
#[[TI/Wejście i wyjście|Obsługa wejścia i wyjścia]] &lt;br /&gt;
#[[TI/Wyjątki|Wyjątki]] &lt;br /&gt;
#[[TI/Wybrane zagadnienia numeryczne|Wybrane zagadnienia numeryczne]]&lt;br /&gt;
#[[TI/Zadania dodatkowe|Zadania dodatkowe]]&lt;br /&gt;
&lt;br /&gt;
==O skrypcie==&lt;br /&gt;
&lt;br /&gt;
Podręcznik „Programowanie z Pythonem“ powstał na podstawie:&lt;br /&gt;
*książki [http://www.swaroopch.com/notes/Python A Byte of Python] autorstwa Swaroop C H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nowe rozdziały i wiele poprawek zostały napisane przez Jarosława Żygierewicza, Maćka Kamińskiego, Zbyszka J-Szmeka.&lt;br /&gt;
&lt;br /&gt;
Dodatkowo wykorzystane materiały:&lt;br /&gt;
&lt;br /&gt;
*en.wikibooks.org, [http://en.wikibooks.org/wiki/Non-Programmer%27s_Tutorial_for_Python_2.0 Non-Programmer's Tutorial for Python 2.0]/ [http://en.wikibooks.org/wiki/Non-Programmer%27s_Tutorial_for_Python_2.0/Revenge_of_the_Strings Revenge of the Strings], Josh Cogliati i współautorzy&lt;br /&gt;
*CreativeCommons, [http://commons.wikimedia.org/wiki/File:Albino_ball_python.png File:Albino ball python.png], autorstwa WingedWolfPsion&lt;br /&gt;
&lt;br /&gt;
Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;a rel=&amp;quot;license&amp;quot; href=&amp;quot;http://creativecommons.org/licenses/by-sa/3.0/pl/&amp;quot;&amp;gt;&amp;lt;img alt=&amp;quot;Creative Commons License&amp;quot; style=&amp;quot;border-width:0&amp;quot; src=&amp;quot;http://i.creativecommons.org/l/by-sa/3.0/pl/88x31.png&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot; href=&amp;quot;http://purl.org/dc/dcmitype/Text&amp;quot; property=&amp;quot;dc:title&amp;quot; rel=&amp;quot;dc:type&amp;quot;&amp;gt;Programowanie z Pythonem&amp;lt;/span&amp;gt; by &amp;lt;a xmlns:cc=&amp;quot;http://creativecommons.org/ns#&amp;quot; href=&amp;quot;http://bci.fuw.edu.pl/edu&amp;quot; property=&amp;quot;cc:attributionName&amp;quot; rel=&amp;quot;cc:attributionURL&amp;quot;&amp;gt;http://bci.fuw.edu.pl/edu&amp;lt;/a&amp;gt; is licensed under a &amp;lt;a rel=&amp;quot;license&amp;quot; href=&amp;quot;http://creativecommons.org/licenses/by-sa/3.0/pl/&amp;quot;&amp;gt;Creative Commons Attribution-Share Alike 3.0 Poland License&amp;lt;/a&amp;gt;.&amp;lt;br /&amp;gt;Based on a work at &amp;lt;a xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot; href=&amp;quot;http://wiki.lo5.bielsko.pl/index.php&amp;quot; rel=&amp;quot;dc:source&amp;quot;&amp;gt;wiki.lo5.bielsko.pl&amp;lt;/a&amp;gt;.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rjb</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Obrazowanie:Obrazowanie_Medyczne/Metody_obrazowania_medycznego_wykorzystuj%C4%85ce_promieniowanie_rentgenowskie&amp;diff=4037</id>
		<title>Obrazowanie:Obrazowanie Medyczne/Metody obrazowania medycznego wykorzystujące promieniowanie rentgenowskie</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Obrazowanie:Obrazowanie_Medyczne/Metody_obrazowania_medycznego_wykorzystuj%C4%85ce_promieniowanie_rentgenowskie&amp;diff=4037"/>
		<updated>2015-09-23T12:06:41Z</updated>

		<summary type="html">&lt;p&gt;Rjb: /* Natura promieniowania Rentgenowskiego */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;Metody obrazowania medycznego wykorzystujące promieniowanie rentgenowskie&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obecnie metody diagnostyki medycznej, wykorzystujące promieniowanie rentgenowskie, można podzielić ogólnie na dwie grupy:&lt;br /&gt;
* Rentgenografię Klasyczną (inne często spotykane określenia, to Radiografia, RTG konwencjonalne, RTG planarne, (ang. planar radiography)). &lt;br /&gt;
* Rentgenowską Tomografię Komputerową (ang. X-Ray Computer Tomography, CT).&lt;br /&gt;
==Natura promieniowania Rentgenowskiego==&lt;br /&gt;
&lt;br /&gt;
Promieniowanie Rentgenowskie (nazywane również promieniowaniem X) jest promieniowaniem elektromagnetycznym powstałym w wyniku hamowania cząstek obdarzonych ładunkiem (stąd inna nazwa promieniowania ''Bremsstrahlung'', niem. ''bremsen'' &amp;amp;mdash; hamować i Strahlung ''hamowanie''). Wiadomo, że cząstki obdarzone ładunkiem elektrycznym, poruszające się ruchem przyspieszony emitują promieniowanie elektromagnetyczne, którego moc chwilową wyraża następujący wzór:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
P = \frac{q^2a^2(t')}{6\pi\epsilon_oc^3} &lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;t'=t - \frac{r}{c}&amp;lt;/math&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
r &amp;amp;mdash; odległość od ładunku do punktu obserwacji, &amp;lt;br&amp;gt;&lt;br /&gt;
''c'' &amp;amp;mdash; prędkość światła,&amp;lt;br&amp;gt;&lt;br /&gt;
''a'' &amp;amp;mdash; przyspieszenie z jakim porusza się ładunek,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\epsilon_0&amp;lt;/math&amp;gt; &amp;amp;mdash; przenikalność elektryczna próżni,&amp;lt;br&amp;gt;&lt;br /&gt;
''c'' &amp;amp;mdash; prędkość światła.&lt;br /&gt;
&lt;br /&gt;
Długość fali promieniowania rentgenowskiego jest mniejsza od 3 nm co odpowiada energiom powyżej 400 eV. Wyróżnia się przy tym tzw. zakres promieniowania miękkiego &amp;amp;mdash; od 400 eV do 10 keV oraz promieniowania twardego, które charakteryzuje się energią powyżej 10 keV. Miękkie promieniowanie rentgenowskie jest absorbowane głównie przez powierzchniowe tkanki ciała ludzkiego i ma zbyt małą energię aby przez nie przeniknąć. W związku z tym nie znajduje zastosowania w Obrazowaniu Medycznym.&lt;br /&gt;
&lt;br /&gt;
Uwaga &amp;amp;mdash; w wielu źródłach można spotkać się z definicją promieniowania rentgenowskiego jako promieniowania elektromagnetycznego o długości fali zawartej pomiędzy ultrafioletem a promieniowaniem gamma. Taka definicja nie jest jednak właściwa, bowiem obecnie można uzyskać promieniowanie rentgenowskie o energii odpowiadającej niskoenergetycznemu promieniowaniu gamma. Zasadniczą różnicą pomiędzy promieniowaniem gamma a promieniowaniem rentgenowskim jest sposób powstawania. Promieniowanie gamma jest promieniowaniem rentgenowskim powstałym w przemianach jądrowych, natomiast promieniowanie rentgenowskie jest promieniowaniem elektromagnetycznym emitowanym przez cząstkę poruszająca się ruchem przyspieszonym.&lt;br /&gt;
&lt;br /&gt;
Promieniowania Rentgenowskiego stosowane w diagnostyce medycznej wytwarzane jest w tzw. Lampach Rentgenowskich.&lt;br /&gt;
&lt;br /&gt;
==Budowa i Zasada Działania Lampy Rentgenowskiej==&lt;br /&gt;
[[File:lampa_rtg.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:lampa_rtg&amp;quot;/&amp;gt;Budowa Lampy Rentgenowskiej. K &amp;amp;mdash; katoda, A &amp;amp;mdash; anoda, &amp;lt;math&amp;gt;U_h&amp;lt;/math&amp;gt; &amp;amp;mdash; napięcie wywołujące żarzenie katody, &amp;lt;math&amp;gt;U_a&amp;lt;/math&amp;gt; &amp;amp;mdash; napięcie przyspieszające elektrony. Rysunek pochodzi ze strony Wikipedii.]]&lt;br /&gt;
&lt;br /&gt;
Schemat Lampy Rentgenowskiej zaprezentowano na &amp;lt;xr id=&amp;quot;fig:lampa_rtg&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;. Składa się ona z katody oraz anody, umieszczonych w szklanej bańce, z której usunięto powietrze. Do katody przyłożone jest napięcie, które wywołuje przepływ przez nią prądu rzędu ułamka ampera. Przepływ prądu powoduje rozgrzanie katody do temperatury około 2200 &amp;amp;deg;C i  w następstwie zjawisko termoemisji elektronów (czyli emisji elektronów przez podgrzany do wysokiej temperatury ciało [[wikipl:Emisja termoelektronowa|Emisja termoelektronowa]]). Przy braku dodatkowego napięcia, elektrony emitowane przez katodę utworzyłyby wokół niej chmurę. Pomiędzy katodę a anodę przyłożone jest jednak napięcie &amp;lt;math&amp;gt;U_A&amp;lt;/math&amp;gt; (maksymalnie 150 kV), które powoduje ruch elektronów w kierunku anody. Elektrony zostają rozpędzone do prędkości około 0,1 prędkości światła po czym wnikają w anodę. W anodzie rozpędzone elektrony w wyniku szeregu różnych procesów, które zostaną omówione w kolejnych rozdziałach tracą swoją energię kinetyczną. Część tej energii zostaje przetworzona na promieniowanie elektromagnetyczne, jednak większość (ponad 95%) ulega przemianie w ciepło. W wyniku tego anoda rozgrzewa się do bardzo wysokich temperatur i musi być wykonana z materiałów o dużej wielkości atomowej &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; (aby skutecznie hamować elektrony) oraz wysokiej temperaturze topnienia. Materiałami, które wykorzystuje się do budowy lampy RTG to najczęściej miedź, wolfram lub molibden. Aby polepszyć chłodzenie lampy rentgenowskiej, do anody doprowadzone są przewody z wodą lub specjalnym olejem, który odprowadza od niej ciepło (na &amp;lt;xr id=&amp;quot;fig:lampa_rtg&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt; są to wejścia oznaczone jako &amp;lt;math&amp;gt;W_\mathrm{in}&amp;lt;/math&amp;gt; oraz &amp;lt;math&amp;gt;W_\mathrm{out}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==długości fali zaprezentowano na rysunkuwania X uzyskiwane w lampie RTG==&lt;br /&gt;
[[File:Tube_Cu_LiF.PNG|thumb|right|300px|&amp;lt;figure id=&amp;quot;fig:rtg_widmo_1&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Natężenie promieniowania X w funkcji energii wytwarzanego w lampie rentgenowskiej.]]&lt;br /&gt;
[[File:rtg_widmo_2.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:rtg_widmo_2&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Natężenie promieniowania X w funkcji długości fali wytwarzanego w lampie rentgenowskiej.]]&lt;br /&gt;
[[File:rtg_cieplo.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:rtg_cieplo&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Elektrony wnikające w anodę będą tracić swoją energię kinetyczną głównie w wyniku zderzeń z siecią krystaliczną anody.]]&lt;br /&gt;
[[File:rtg_hamowanie.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:rtg_hamowanie&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt; Tor ruchu elektronu zostaje zakrzywiony przez pole elektryczne pochodzące od jądra atomowego. Ładunek poruszający się ruchem przyspieszonym emituje promieniowanie elektromagnetyczne.]]&lt;br /&gt;
&lt;br /&gt;
Natężenie promieniowania rentgenowskiego uzyskiwanego w lampie rentgenowskiej zaprezentowano na &amp;lt;xr id=&amp;quot;fig:rtg_widmo_1&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt; w funkcji energii tego promieniowania oraz na &amp;lt;xr id=&amp;quot;fig:rtg_widmo_2&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt; w funkcji długości fali. W widmach tych można wyróżnić trzy istotne cechy:&lt;br /&gt;
* Widmo promieniowania X zanika dla pewnej granicznej energii oraz długości fali.&lt;br /&gt;
* Istnienie części ciągłej widma.&lt;br /&gt;
* Istnienie części dyskretnej widma, nazywanej widmem charakterystycznym.&lt;br /&gt;
&lt;br /&gt;
Omówimy teraz, w jaki sposób powstaje w lampie RTG promieniowanie o rozkładzie zaprezentowanym na &amp;lt;xr id=&amp;quot;fig:rtg_widmo_1&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt; i &amp;lt;xr id=&amp;quot;fig:rtg_widmo_2&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Mechanizm powstawania części ciągłej widma RTG===&lt;br /&gt;
Jak wiemy, elektrony emitowane przez katodę zostają rozpędzone na drodze pomiędzy anodą a katodą. Wnikając w anodę, elektrony te będę przede wszystkim zderzać się z centrami sieci krystalicznej materiału, z którego wykonana jest anoda (&amp;lt;xr id=&amp;quot;fig:rtg_cieplo&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;) . W wyniku wspomnianych zderzeń, energia kinetyczna elektronu przekazana sieci krystalicznej zostanie zamieniona na ciepło podgrzewające anodę. W ten sposób elektron traci ponad 95 % swojej energii kinetycznej, którą zyskał w trakcie przyspieszania na drodze pomiędzy katodą a anodą. Elektron może również nie ulec zderzeniu z siecią krystaliczną, lecz wniknąć wgłąb atomu. Pod wpływem oddziaływania Kulombowskiego z dodatnio naładowanym jądrem, tor ruchu elektronu zostaje zakrzywiony. Ruch po torze krzywoliniowym jest ruchem przyspieszonym, w wyniku którego elektron emituje promieniowanie elektromagnetyczne (patrz &amp;lt;xr id=&amp;quot;fig:rtg_hamowanie&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;. W takim przypadku elektron traci swoją energię  kinetyczną, które ulega zamianie na energię promieniowania X.&lt;br /&gt;
Pomimo, że mniej niż 2 % energii kinetycznej elektronów jest zamienianie w lampie rentgenowskiej na energię promieniowania elektromagnetycznego, wyhamowywanie elektronów jest najbardziej wydajnym sposobem uzyskiwania promieniowania X. Natężenie emitowanego promieniowania silnie bowiem spada wraz z masą przyspieszanej cząstki, a kolejna obdarzona ładunkiem cząstka jest już 200 razy cięższa od elektronu.&lt;br /&gt;
====Maksymalna energia promieniowania X. Granica krótkofalowa promieniowania rentgenowskiego====&lt;br /&gt;
Zgodnie z zasadą zachowania energii, cząstka nie może wypromieniować więcej energii niż wynosi jej energia kinetyczna. Jeśli napięcie przyspieszające elektron wynosi ''U'', cząstka zyska energię kinetyczną: &lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;E_k = U\cdot e&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie: ''e'' &amp;amp;mdash; ładunek elektronu. &amp;lt;br&amp;gt;&lt;br /&gt;
Maksymalna energię ''E'' jaką może uzyskać foton Rentgenowski jest zatem równa: &lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;E = E_k&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Na &amp;lt;xr id=&amp;quot;fig:rtg_widmo_1&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt; widzimy, że widmo promieniowania X zanika dla energii 100 keV. Możemy na tej podstawie wywnioskować, że napięcie przyspieszające elektrony wynosiła 100 kV.&lt;br /&gt;
&lt;br /&gt;
Maksymalna częstość promieniowania rentgenowskiego wynosi zatem:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;E = h\nu\rightarrow \nu= \frac{eU}{h}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
zaś jego długość:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_g = \frac{hc}{Ue}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Wielkość &amp;lt;math&amp;gt;\lambda_g&amp;lt;/math&amp;gt; nazywamy granicą krótkofalową promieniowania X emitowanego z lampy rentgenowskiej.&lt;br /&gt;
&lt;br /&gt;
====Mechanizm powstawania widma ciągłego &amp;amp;mdash; model Kramera (1923).====&lt;br /&gt;
&lt;br /&gt;
[[File:rtg_tarcza.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:rtg_tarcza&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Natężenie promieniowania X w funkcji energii wytwarzanego w lampie rentgenowskiej.]]&lt;br /&gt;
[[File:tarcza_widmo.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:tarcza_widmo&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Natężenie promieniowania X w funkcji energii oraz długości fali wytwarzanego w lampie rentgenowskiej.]]&lt;br /&gt;
Wiemy już, iż promieniowanie X wytwarzane w lampie rentgenowskiej osiąga pewną maksymalną energię (albo odpowiadającej jej pewną minimalną długość fali). Nie znamy jednak jeszcze całościowego mechanizmu powstawania widma ciągłego. Niestety, mechanizm ten jest bardzo skomplikowany i wykracza znacznie poza ramy niniejszego podręcznika. W tym miejscu zaprezentujemy jedynie pewien model generacji widma w lampie rentgenowskiej zaproponowany przez Kramera w roku 1923. Jest to model stosunkowo prosty, ale posiadający pewne wady i krytykowany, jednakże model ten umożliwia wyjaśnienie powstawania rozkładu natężenie promieniowania X. &amp;lt;br&amp;gt;&lt;br /&gt;
Model Kramera opisuje emisję promieniowania Rentgenowskiego w wyniku oddziaływania z bardzo cienką tarczą. Przewiduje on widmo emitowanego promieniowanie w postaci:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;I(\nu)d\nu = &lt;br /&gt;
\left\{&lt;br /&gt;
\begin{array}{lll} &lt;br /&gt;
\frac{8\pi^2AZ^2e^5}{3\sqrt{3}m_0Vc^3}, &amp;amp; \textrm{dla} &amp;amp;  \nu \leq \nu_g \\&lt;br /&gt;
\\&lt;br /&gt;
0, &amp;amp;  \textrm{dla} &amp;amp; \nu&amp;gt;\nu_g \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Jak można zauważyć, model przewiduje jednorodny rozkład energii promieniowania rentgenowskiego emitowanego przez cienka tarczę. Widmo to kończy się na częstości &amp;lt;math&amp;gt;\nu_g&amp;lt;/math&amp;gt;. Częstości tej odpowiada maksymalna energia jaką elektrony mogą zamienić na energię promieniowania elektromagnetycznego (patrz &amp;lt;xr id=&amp;quot;fig:rtg_tarcza&amp;quot;&amp;gt;rys. %i.A&amp;lt;/xr&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Korzystając z modelu Kramera możemy również oszacować postać widma promieniowania rentgenowskiego emitowanego z grubej tarczy (np. anody lampy RTG). Tarcza taka będzie się składać z wielu cienkich tarcz. Widmo emitowane z każdej cienkiej zaprezentowano na &amp;lt;xr id=&amp;quot;fig:rtg_tarcza&amp;quot;&amp;gt;rys. %i.A&amp;lt;/xr&amp;gt;, przy czym przy każdej cienkiej tarczy odpowiada inna wartości częstości granicznej &amp;lt;math&amp;gt;\nu_g&amp;lt;/math&amp;gt;, dla której widmo promieniowania rentgenowskiego zanika. Spowodowane jest to faktem, iż w każdej kolejnej tarczy elektrony część swojej energii kinetycznej zamieniają na promieniowanie rentgenowskie. Załóżmy, że w pierwszą cienką warstwę wnika ''N'' elektronów o energii kinetyczną ''E'', z których ''n'' elektronów całą swoją energię kinetyczną zamieni na promieniowanie rentgenowskie. W związku z tym elektrony te nie będą w stanie wniknąć do kolejnej cienkiej tarczy. Pozostałe elektrony z wiązki zamieniły na promieniowanie elektromagnetyczne tylko część swojej energii, którą oznaczymy &amp;lt;math&amp;gt;\Delta E&amp;lt;/math&amp;gt;. Po opuszczeniu pierwszej cienkiej tarczy, wiązka zawiera ''N-n'' elektronów o maksymalnych energiach &amp;lt;math&amp;gt;E-\Delta E&amp;lt;/math&amp;gt;. Wnikając do kolejnej cienkiej tarczy, elektrony mogą zatem oddać co najwyżej energię &amp;lt;math&amp;gt;E-\Delta E&amp;lt;/math&amp;gt;, której odpowiada częstość graniczna &amp;lt;math&amp;gt;\nu_g = \frac{E-\Delta E}{h}&amp;lt;/math&amp;gt;, która jest niższa niż częstość graniczna uzyskana w widmie pochodzącym z pierwszej cienkiej tarczy: &amp;lt;math&amp;gt;\nu_g = \frac{E}{h}&amp;lt;/math&amp;gt;. Sumując widma pochodzące od wielu cienkich tarcz uzyskujemy zanikające liniowo widmo promieniowania X. &lt;br /&gt;
&lt;br /&gt;
Aby uzyskać widmo promieniowania rentgenowskiego w funkcji długości fali, należy wykonać następujące przekształcenia. Wiemy, że widmo emitowane w wyniku oddziaływania elektronów z cienką tarczą ma postać:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; I(\nu) = \left\{&lt;br /&gt;
\begin{array}{lll}&lt;br /&gt;
I_0 &amp;amp; \textrm{dla} &amp;amp; \nu&amp;lt;nu_0 \\&lt;br /&gt;
\\&lt;br /&gt;
0 &amp;amp; \textrm{dla} &amp;amp; \nu&amp;gt;nu_0 \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Zależność pomiędzy częstością fali a jej długością opisuje następujący wzór:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \lambda = \frac{c}{\nu}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie ''c'' &amp;amp;mdash; prędkość światła.&lt;br /&gt;
Obliczając przyrost długości fali w funkcji przyrostu częstości fali otrzymujemy:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; d\lambda = -\frac{c}{\nu^2}d\nu&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
z kolei związek pomiędzy natężeniem promieniowania elektromagnetycznego wyemitowane w wąskim przedziale częstości &amp;lt;math&amp;gt;d\nu&amp;lt;/math&amp;gt; oraz wąskim przedziale długości fal:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; I(\lambda)d\lambda = -I(\nu)d\nu\rightarrow I(\lambda)\frac{d\nu}{d\lambda}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Ponieważ &amp;lt;math&amp;gt; \frac{d\lambda}{d\nu} = -\frac{c}{\nu^2}&amp;lt;/math&amp;gt;, ostatecznie dostajemy:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; I(\lambda) = \left\{&lt;br /&gt;
\begin{array}{lll}&lt;br /&gt;
I_0\frac{c}{\lambda} &amp;amp; \textrm{dla} &amp;amp; \lambda&amp;gt;\lambda_g \\&lt;br /&gt;
\\&lt;br /&gt;
0 &amp;amp; \textrm{dla} &amp;amp; \lambda&amp;lt;\lambda_g \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Widmo promieniowanie X, emitowanego w lampie rentgenowskiej, w funkcji częstości i długości fali zaprezentowano na rysunku &amp;lt;xr id=&amp;quot;fig:tarcza_widmo&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Naturalna filtracja promieniowania rentgenowskiego====&lt;br /&gt;
[[File:rtg_widmo_teoretyczne.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:rtg_widmo_teoretyczne&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Teoretyczna zależność natężenia promieniowania X uzyskiwanego w procesie hamowania elektronów w lampie Rentgenowskiej. (Rysunek jest modyfikacją wykresu pochodzącego ze strony [http://astrophysics.fic.uni.lodz.pl/medtech/start.html] i udostępnionego przez dra Jacka Rumińskiego, za co autor niniejszych materiałów serdecznie dziękuje.)]]&lt;br /&gt;
&lt;br /&gt;
[[File:rtg_widmo_w_praktyce.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:rtg_widmo_w_praktyce&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Na skutek oddziaływania promieniowania X z atomami anody w procesach: fotoelektrycznym oraz rozpraszaniu Comptona, zachodzi filtracja tego promieniowania już w anodzie lampy oraz okienku berylowym. (Rysunek jest modyfikacją wykresu pochodzącego ze strony [http://astrophysics.fic.uni.lodz.pl/medtech/start.html] i udostępnionego przez dra Jacka Rumińskiego, za co autor niniejszych materiałów serdecznie dziękuje.)]]&lt;br /&gt;
&lt;br /&gt;
Na &amp;lt;xr id=&amp;quot;fig:rtg_widmo_teoretyczne&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt; zaprezentowano teoretyczny kształt widma, jaki powstaje w wyniku hamowania elektronów w tarczy lampy rentgenowskiej. W praktyce jednak, widmo to odbiega od kształtu przewidzianego przez model Kramera. Promieniowanie X, zanim opuści anodę, oddziałuje z jej atomami w procesach: fotoelektrycznym i comptonowskim. Na skutek wymienionych procesów, ulega zmniejszeniu natężenie promieniowania rentgenowskiego. Ponadto, w celu przeciwdziałania propagacji promieniowania X we wszystkich kierunkach, lampa rentgenowska znajduje się w ołowianej koszulce (tzw. kołpaku), o grubości kilku milimetrów. Promieniowania z lampy rentgenowskie wydostaje się na zewnątrz poprzez okienko wykonane z berylu. Beryl, mimo że dobrze transmituje promieniowanie rentgenowskie, również osłabia do pewnego stopnia natężenie promieniowania X. Zmniejszanie natężenia promieniowania X po przejściu przez kolejne ośrodki zaprezentowano na rysunku &amp;lt;xr id=&amp;quot;fig:rtg_widmo_w_praktyce&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;. Jak można zauważyć, z wiązki promieniowania X usuwane są w szczególności fotony niskoenergetyczne.&lt;br /&gt;
&lt;br /&gt;
====Część dyskretna widma promieniowania X wytworzonego w lampie rentgenowskiej====&lt;br /&gt;
Przypominamy, że elektron wnikający w anodę, traci swoją energię kinetyczną w wyniku trzech procesów:&lt;br /&gt;
* zderzeń z siecią krystaliczną anody,&lt;br /&gt;
* emisji promieniowania hamowania,&lt;br /&gt;
* wybijania elektronów z powłok atomowych.&lt;br /&gt;
&lt;br /&gt;
Trzeci spośród procesów jest tematem niniejszego rozdziału. Po wybiciu elektronu, powłoka może zostać zapełniona przez elektrod z powłoki o wyższej energii. W trakcie tego procesu, elektron emituje nadwyżkę swojej energii w postaci promieniowania elektromagnetycznego. Różnica poziomów energetycznych w atomie, a w związku z tym i energia promieniowania elektromagnetycznego wynosi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\Delta E \approx C\left[\frac{1}{m^2} - \frac{1}{n^2}\right]&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;m, n&amp;lt;/math&amp;gt; &amp;amp;mdash; główne liczby kwantowe powłok,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; &amp;amp;mdash; stała zależna od liczby atomowej ''Z'' (ładunku jądra), stałej Rydberga oraz stałej ekranowania. &amp;lt;br&amp;gt;&lt;br /&gt;
Przykładowo, dla miedzi, stała &amp;lt;math&amp;gt;C\approx 10&amp;lt;/math&amp;gt; keV. Jeśli elektron wnikający w anodę wybiję elektron z niskiej powłoki i jednocześnie luka po wybitym elektronie zostanie zastąpiona przez elektron z powłoki o wysokiej głównej liczbie kwantowej, wtedy emitowany kwant promieniowania elektromagnetycznego może mieć energię odpowiadającą fotonowi rentgenowskiemu. &lt;br /&gt;
W trakcie zmiany przez elektron orbity może być emitowane promieniowanie elektromagnetyczne o ściśle określonych energiach, w związku z czym proces wybijania elektronów z atomów anody prowadzi do powstawania widma składającego się z dyskretnych linii. Widmo to nazywane jest '''widmem charakterystycznym''', gdyż układ linii spektralnych jest charakterystyczny dla danego pierwiastka. Promieniowanie charakterystyczne dla napięcia poniżej 60 kV praktycznie jest pomijalne (ale wykorzystuje się je w mammografii). Dla napięcia anodowego wynoszącego 130 kV wkład widma charakterystycznego w rozkładzie energii promieniowania X  wynosi około 5%.&lt;br /&gt;
Widmo ciągłe i charakterystyczne promieniowania powstałego w lampie rentgenowskiej nakładają się na siebie. Kształt widma wypadkowego zaprezentowano na &amp;lt;xr id=&amp;quot;fig:rtg_widmo_1&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Odprowadzanie ciepła w lampie rentgenowskiej===&lt;br /&gt;
Miejsce na anodzie, które jest bombardowane przez elektrony nazywamy ogniskiem. 	Rozmiary ogniska w nowoczesnych lampach rentgenowskich są rzędu ~0.1 mm. Okazuje się, że elektrony wnikające w anodę, mniej niż 1% swojej energii kinetycznej oddają w postaci promieniowania elektromagnetycznego. Pozostała część energii kinetycznej ulega konwersji w ciepło. Przykładowo dla anody wykonanej z wolframu i elektronów przyspieszonych napięciem 50 keV, tylko 0.4 % ich początkowej energii kinetycznej zostaje wyemitowana w postaci promieniowania X.  Produkowane ciepło w lampach Rentgenowskich stanowi poważny problem dla konstrukcji tych urządzeń. W trakcie pracy anoda lampy może rozgrzać się do temperatury wyższej niż temperatura topnienia materiału z którego jest zbudowana, zwłaszcza że ciepło to powstaje głównie w bardzo małym obszarze ogniska. W celu rozwiązania problemu odprowadzania ciepła wprowadzonych zostało kilka rozwiązań:&lt;br /&gt;
* Anoda jest chłodzona wodą lub olejem, rozwiązanie to można stosować dla napięcia anodowego poniżej 40 kV, wtedy bowiem moc wydzielanego ciepła nie przekracza 2 kW i może zostać odprowadzona przez system chłodzący.&lt;br /&gt;
* Lampa z tzw wirującą anodą; rozwiązanie to umożliwia nie naświetlania jednego punktu na anodzie, tylko pierścienia o szerokości ogniska i długości. W wyniku wirowania anody, dane miejsce jest wystawione na zderzenia z elektronami tylko przez krótką chwilę czasu, po czym możliwe jest odprowadzenie z tego miejsca ciepła. Anoda rotuje z prędkością od 3600 do 10000 obrotów na minutę. Lampy z wirującą anodą umożliwiają odprowadzenie do 50 kW ciepła.&lt;br /&gt;
* Zwiększenie rozmiaru ogniska. W lampach Rentgenowskich stosowanych w medycynie obszar anody, który jest bombardowany przez elektrony może mieć większe rozmiary niż w standardowych lampach, co umożliwia lepsze odprowadzanie ciepła. W połączeniu z układami chłodzącymi oraz wirującą anodą, rozwiązanie to umożliwia zwiększenie napięcia przyspieszającego do maksymalnej wartości 150 kV. Uzyskanie promieniowania X o energii większej niż 150 - 160 keV przy pomocy lampy rentgenowskiej jest niemożliwe z uwagi na problem odprowadzania ciepła. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Opisane sposoby nie zawsze zabezpieczają anodę lampy rentgenowskiej przed przegrzaniem,w związku z tym nowoczesne urządzenia (zwłaszcza obrazowania medycznego) wyposażone są w systemy kontrolujące temperaturę lampy i wyłączające aparaturę, na określony czas, jeśli przekroczyła ona pewien określony próg. Powoduje to oczywiście uciążliwe przestoje w pracy urządzenia diagnostycznego.&lt;br /&gt;
&lt;br /&gt;
==Osłabienie promieniowania X przez materię==&lt;br /&gt;
[[File:mu_niejednorodne.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:mu_niejednorodne&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Ilustracja do wyprowadzenia wzoru na osłabienie natężenia promieniowania X w ośrodku o niejednorodnym rozkładzie liniowego współczynnika osłabienia promieniowania.]]&lt;br /&gt;
&lt;br /&gt;
W zakresie energii stosowanych w Obrazowaniu Medycznym promieniowanie Rentgenowskie oddziałuje z materia w procesach rozproszenia Rayleigh’a, Thomsona i Comptona oraz efekcie fotoelektrycznym. Każdy z tych procesów scharakteryzowany jest przez przekrój czynny &amp;amp;sigma;. Przypominamy, wzór na osłabienie wiązki promieniowania w funkcji przebytej drogi:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; n(x) = n_0e^{-N\sigma x}   &amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; &amp;amp;mdash; ilość centrów oddziaływania na jednostkę objętości. &amp;lt;br&amp;gt;&lt;br /&gt;
Wprowadzone zostało również pojecie średniej drogi swobodnej:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda = \langle x \rangle = \frac{1}{N\sigma}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
oraz liniowy współczynnik osłabienia wiązki promieniowania:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\mu = N\sigma.&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Osłabienie natężenia promieniowania X w przypadku '''monoenergetycznej''' wiązki i przechodzenia przez ośrodek charakteryzującym się jednorodnym liniowym współczynnikiem osłabienia promieniowania &amp;amp;mu; wyraża następujący wzór: &lt;br /&gt;
&amp;lt;equation id=&amp;quot;eq:lambert_beer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; I = I_0e^{-\mu x}, &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;I_0&amp;lt;/math&amp;gt; &amp;amp;mdash; natężenie wiązki padającej na ośrodek,&lt;br /&gt;
&amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; &amp;amp;mdash; natężenie wiązki po pokonaniu w ośrodku drogi ''x''.&lt;br /&gt;
Jeżeli promieniowanie Rentgenowskie przechodzi przez ośrodki o różnym współczynniku &amp;amp;mu; (patrz &amp;lt;xr id=&amp;quot;fig:mu_niejednorodne&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;), wtedy wzór ( &amp;lt;xr id=&amp;quot;eq:lambert_beer&amp;quot;&amp;gt; %i&amp;lt;/xr&amp;gt;) przekształca się do postaci:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{l}&lt;br /&gt;
I_1 = I_0e^{-\mu_1 x} \\&lt;br /&gt;
\\&lt;br /&gt;
I_2 = I_1e^{-\mu_2 x}\rightarrow I_2 = I_0e^{-\mu_1 x}\cdot e^{-\mu_2 x}&lt;br /&gt;
\\&lt;br /&gt;
\ldots&lt;br /&gt;
\\&lt;br /&gt;
I_n = I_0e^{-\mu_1 x}\cdot e^{-\mu_2 x}\cdot\ldots \cdot e^{-\mu_n x}  =&lt;br /&gt;
I_0e^{\sum_{i=1}^N -\mu_ix}&lt;br /&gt;
 \\&lt;br /&gt;
\\&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;I_i&amp;lt;/math&amp;gt; &amp;amp;mdash; natężenie promieniowania rentgenowskiego po przebyciu drogi ''x'' w ''i''-tym ośrodku, charakteryzującym się liniowym współczynnikiem osłabienia promieniowania rentgenowskiego &amp;lt;math&amp;gt;\mu_i&amp;lt;/math&amp;gt;. Zanim promieniowanie rentgenowskie dotrze do ''i''-tego ośrodka, przechodzi przez ośrodki o współczynniku osłabienia &amp;lt;math&amp;gt;\mu_1, \mu_2, \ldots, \mu_{i-1}&amp;lt;/math&amp;gt;. Przechodząc od struktur dyskretnych do ciągłych dostajemy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;equation&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
I\left(x\right) = I_0 e^{\int_{x=0}^{x=d} -\mu(x) dx}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/equation&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Natężenie promieniowania Rentgenowskiego emitowanego przez Lampę Rentgenowską==&lt;br /&gt;
[[File:natezenie_napiecie.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:natezenie_napiecie&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Wraz ze wzrostem napięcia przyspieszającego rośnie energia promieniowania X oraz jego natężenie.]]&lt;br /&gt;
[[File:natezenie_liczba_atomowa-anody.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:natezenie_liczba_atomowa-anody&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Dla ustalonego napięcia przyspieszającego, natężenie promieniowania X rośnie wraz z liczbą Z  materiału z jakiego zrobiona jest anoda.]]&lt;br /&gt;
Ogólnie natężenie promieniowania X produkowanego w Lampie Rentgenowskiej można opisać następującym wzorem:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;eq:I_U&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;I = K\cdot Z\cdot I_A\cdot U_A^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie:&amp;lt;br&amp;gt;&lt;br /&gt;
* K &amp;amp;mdash; to pewna stała, zależna miedzy innymi od konstrukcji lampy,&lt;br /&gt;
* Z &amp;amp;mdash; to liczna atomowa materiału, z którego wykonana jest anoda,&lt;br /&gt;
* &amp;lt;math&amp;gt;I_A&amp;lt;/math&amp;gt; &amp;amp;mdash; natężenie prądu anodowego (przypominamy, że w lampie rentgenowskiej pomiędzy katodą a anodą poruszają się elektrony, mamy zatem do czynienia ze zjawiskiem przepływu prądu elektrycznego),&lt;br /&gt;
* &amp;lt;math&amp;gt;U_A&amp;lt;/math&amp;gt; &amp;amp;mdash; napięcie anodowe (przyspieszające).&lt;br /&gt;
Na &amp;lt;xr id=&amp;quot;fig:natezenie_napiecie&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt; i &amp;lt;xr id=&amp;quot;fig:natezenie_liczba_atomowa-anody&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt; zaprezentowano widmo natężenia promieniowania X w zależności od napięcia przyspieszającego i materiału z jakiego wykonana jest anoda.&lt;br /&gt;
Musimy być również świadomi, że natężenie prądu anodowego &amp;lt;math&amp;gt;I_A&amp;lt;/math&amp;gt; zależy od ilości elektronów wyprodukowanych w zjawisku termoemisji, a to z kolei zależy od wielkości prądu płynącego przez katodę. Zależność ta jest proporcjonalna &amp;amp;mdash; w celu zwiększenia np. 3 krotnie wielkość prądu &amp;lt;math&amp;gt;I_A&amp;lt;/math&amp;gt; należy 3 krotnie zwiększyć wartość prądu płynącego przez katodę. Ponadto na natężenie prądu anodowego &amp;lt;math&amp;gt;I_A&amp;lt;/math&amp;gt; wpływa również napięcie przyspieszające &amp;lt;math&amp;gt;U_A&amp;lt;/math&amp;gt;, jednak ta zależność nie jest proporcjonalna.&lt;br /&gt;
&lt;br /&gt;
==Kontrast obrazu uzyskanego przy pomocy promieniowania rentgenowskiego==&lt;br /&gt;
[[File:struktura.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:struktura&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Ilustracja do estymacji kontrastu uzyskiwanego za pomocą promieniowania rentgenowskiego.]]&lt;br /&gt;
&lt;br /&gt;
Aby móc rozróżnić na obrazie jakąś strukturę, musi się ona charakteryzować się wartością parametru fizycznego, który odwzorowujemy na obrazie, istotnie różną od wartości struktur sąsiednich lub tła. Innymi słowy, do wyróżnienia struktur na obrazie potrzebny jest odpowiedni kontrast.Nie będziemy się w tym rozdziale zajmowali detektorami promieniowania rentgenowskiego.&lt;br /&gt;
Interesuje nas na razie tylko, jaki teoretycznie możemy uzyskać kontrast na zdjęciu wykonanym przy pomocy promieniowania Rentgenowskiego.&lt;br /&gt;
W tym celu załóżmy, iż wiązka promieniowania rentgenowskiego przechodzi przez ośrodek o grubości ''L'' i liniowym współczynniku promieniowania X równym &amp;lt;math&amp;gt;\mu_1&amp;lt;/math&amp;gt;. W ośrodku znajduje się struktura o grubości ''d'' i liniowym współczynniku osłabienia promieniowa X równym &amp;lt;math&amp;gt;\mu_2&amp;lt;/math&amp;gt; (patrz &amp;lt;xr id=&amp;quot;fig:struktura&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;). Wyznaczmy na początku kontrast lokalny:&lt;br /&gt;
&amp;lt;equation&amp;gt;&amp;lt;math&amp;gt;C = \frac{I_2 - I_1}{I_1} &amp;lt;/math&amp;gt;&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;I_1&amp;lt;/math&amp;gt; &amp;amp;mdash; natężenie promieniowania po przejściu tylko przez ośrodek o współczynniku liniowego osłabienia promieniowania X równym &amp;lt;math&amp;gt;\mu_1&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;I_2&amp;lt;/math&amp;gt; &amp;amp;mdash; natężenie promieniowania po przejściu przez ośrodki o współczynniku liniowego osłabienia promieniowania X równym &amp;lt;math&amp;gt;\mu_1&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\mu_1&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Po wykonaniu prostych obliczeń otrzymujemy:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{array}{l}&lt;br /&gt;
I_1 = I_0e^{-\mu_1L} \\&lt;br /&gt;
\\&lt;br /&gt;
I_2 = I_0e^{-\mu_1(L-d)-d\mu_2} \\&lt;br /&gt;
\\&lt;br /&gt;
I_2 - I_1 = I_0e^{-\mu_1(L)}\left(e^{-\Delta\mu d} - 1\right)&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie: &amp;lt;math&amp;gt;\Delta\mu=\left(\mu_2 - \mu_1\right)&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Załóżmy teraz dla uproszczenia, że nasza struktura ma niewielkie rozmiary oraz różnica w liniowym współczynniku osłabienia promieniowanie X &amp;lt;math&amp;gt;\Delta\mu&amp;lt;/math&amp;gt; jest również niewielki, czyli gdy &lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta\mu d \ll 1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
wtedy:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
I_2 - I_1 = -\Delta\mu dI_0e^{-\mu_1L}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
zaś kontrast lokalny wynosi:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
C = \frac{I_2 - I_1}{I_2} = \frac{-\Delta\mu d I_0e^{-\mu_1L}}{I_0 e^{-\mu_1L}} = -\Delta\mu d&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Kontrast lokalny zależy zatem od grubości struktury ''d'' oraz różnicy w liniowym współczynniku osłabienia promieniowania ''X'' pomiędzy interesującą nas strukturą i tłem.&lt;br /&gt;
&lt;br /&gt;
==Budowa Aparatury wykorzystywanej w Rentgenografii Klasycznej==&lt;br /&gt;
&lt;br /&gt;
Podstawowym elementem każdej aparatury rentgenowskiej jest oczywiście lampa rentgenowska, której budowa została omówiona we wcześniejszych rozdziałach. Kolejne podzespoły to:&lt;br /&gt;
* Filtry.&lt;br /&gt;
* Ogranicznik promieniowania (kolimator).&lt;br /&gt;
* Stół na którym umieszczany jest pacjent. &lt;br /&gt;
* Kratka przeciwrozproszeniowy.&lt;br /&gt;
* Detektor promieniowania. &lt;br /&gt;
&lt;br /&gt;
Budowa oraz zasady funkcjonowania poszczególnych elementów (za wyjątkiem stołu) zostanie omówiona w osobnych podrozdziałach.&lt;br /&gt;
&lt;br /&gt;
===Filtry===&lt;br /&gt;
Promieniowanie rentgenowskie emitowane przez lampę nie jest promieniowaniem monoenergetycznym. Zadaniem filtrów jest usuniecie z wiązki promieniowania, które nie może być wykorzystane do diagnostyki. Przede wszystkim jest to promieniowanie o energiach niższych niż 10 keV. Promieniowanie o energii poniższej 10 keV jest silne osłabiane przez ciało człowieka. W związku z tym ilość fotonów, która dotrze do detektorów jest zbyt mała, aby uzyskać wyraźny obraz. Innymi słowy, naświetlenie pacjenta promieniowaniem  miękkim spowoduje obciążenie go dawką promieniowania jonizującego bez żadnych korzyści diagnostycznych. Filtry pełnią niezwykle istotną rolę w przypadku mammografii, co zostanie omówione w osobnym rozdziale.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Kolimator===&lt;br /&gt;
Zadaniem kolimatora jest odpowiednie uformowanie kształtu wiązki promieniowania rentgenowskiego. W aparaturze diagnostycznej stosowane są głównie kolimatory nastawne, podczas gdy w radioterapii są to zwykle kolimatory stałe, wykonane z ołowianych blach o odpowiednio wykonanym kształcie.  Szczególnym przypadkiem kolimatora nastawnego jest tzw. ogranicznik głębinowy. W jego przypadku, kształtowanie wiązki promieniowania przeprowadzane jest za pomocą układu co najmniej dwóch ograniczników nastawnych znajdujących się w różnych odległościach od ogniska lampy rentgenowskiej. Kolimatory nastawne są odpowiednio sprzężone ze sobą oraz ze stołem na którym umieszczony jest pacjent. Kolimatory głębinowy wytwarza wiązkę promieniowania o prostokątnym przekroju, i automatycznie dobierają jej rozmiar do rozmiaru detektora promieniowania X, którym najczęściej jest kaseta z filmem.&lt;br /&gt;
&lt;br /&gt;
===Kratka przeciwrozproszeniowa===&lt;br /&gt;
Promieniowanie rentgenowskie oddziałuje z materią, z której zbudowany jest organizm ludzki, głównie w dwóch procesach:&lt;br /&gt;
* Efekcie Fotoelektrycznym,&lt;br /&gt;
* Zjawisku Comptona.&lt;br /&gt;
&lt;br /&gt;
Efekt fotoelektryczny jest bardzo korzystny z punktu widzenia formowania obrazu. Skutkuje on bowiem absorpcją wyemitowaniem przez lampę fotonu rentgenowskiego. W przypadku Efektu Comptona, tylko część energii fotonu ulega absorpcji, zaś foton ulega rozproszeniu. Rozpraszanie Comptonowskie jest zatem bardzo niekorzystne w obrazowaniu medycznym i prowadzi do zaszumienia uzyskiwanych obrazów. Aby przeciwdziałać docieraniu do detektora promieniowania rentgenowskiego fotonów rozproszonych stosowane są specjalne kratki. Kratki te składają z pasków materiału silnie pochłaniającego promieniowanie rentgenowskie, umieszczonych w obudowie wykonanej z tworzywa sztucznego. Tak wykonana kratka może jednak rzucać cień na detektor promieniowania. Problem ten rozwiązano wprowadzając ruch kratki w trakcie wykonywania zdjęcia, co prowadziło do rozmazania obrazu kratki na zdjęciu rentgenowskim. Kratka ruchoma jest nazywana również kratką  Buckego. Zastosowanie kratek przeciwrozproszeniowych podnosi kontrast około 3-4 krotnie.&lt;br /&gt;
&lt;br /&gt;
== Film i ekrany wzmacniające==&lt;br /&gt;
Jak wiemy ludzkie oko nie jest czułe na promieniowanie X.  W skład rentgenowskiej aparatury diagnostycznej  musi zatem   wchodzić układ, który dokona detekcji promieniowania  X, utworzy obraz i umożliwi jego prezentację w zakresie światła widzialnego. Pierwszym detektorem promieniowania rentgenowskiego, który zresztą przyczynił się pośrednio do odkrycia tego promieniowania, była zwykła klisza fotograficzna. Do połowy lat 70 materiał z emulsją fotograficzną był naświetlany bezpośrednio promieniowaniem które opuściło pacjenta.  Prowadzone badania wykazały jednak, że emulsja fotograficzna jest również bardzo mało czuła na promieniowanie X. Z drugiej strony emulacja fotograficzna jest bardzo czuła na promieniowanie z zakresu widzialnego.  Postanowiono zatem, do układu detekcji wprowadzić materiał, który dokona konwersji promieniowania rentgenowskiego na światło widzialne. W tym celu wykorzystano zjawisko Luminescencji.  &lt;br /&gt;
Luminescencja (tzw. zimne świecenie, jarzenie) &amp;amp;mdash; zjawisko emisji fal świetlnych przez ciała (luminofor), wywołane inną przyczyną niż rozgrzanie ciała do wysokiej temperatury. Luminescencja obejmuje bardzo szeroki zakres zjawisk emisji promieniowania świetlnego, takich jak:&lt;br /&gt;
* Chemiluminescencja &amp;amp;mdash; 	Wytworzenie światła w trakcie niektórych reakcji chemicznych.&lt;br /&gt;
* Elektroluminescencja &amp;amp;mdash;  Świecenie pod wpływem stałego lub zmiennego prądu elektrycznego.&lt;br /&gt;
* Elektronoluminescencja (katodoluminescencja)  &amp;amp;mdash;	Świecenie pod wpływem elektronów przyspieszanych napięciem między elektrodami (ten rodzaj 	wzbudzania ma liczne zastosowania w kineskopach, oscyloskopach, mikroskopach elektronowych itp.)&lt;br /&gt;
* Fotoluminescencja &amp;amp;mdash; Świecenie wywołane przez pochłonięcie promieniowania elektromagnetycznego z obszaru widzialnego, ultrafioletu lub podczerwieni. Pochłonięta energia jest następnie wyemitowana także w postaci światła, na ogół o energii mniejszej niż energia światła wzbudzającego. Ze względu na czas trwania fotoluminescencję dzieli się na: &lt;br /&gt;
** fluorescencję &amp;amp;mdash; zjawisko trwające wyłącznie podczas działania czynnika wzbudzającego,&lt;br /&gt;
** fosforescencję &amp;amp;mdash; zjawisko trwające również przez pewien czas po ustąpieniu czynnika wzbudzającego; substancje zdolne do fosforescencji nazywane są zwyczajowo fosforami.&lt;br /&gt;
* Scyntylacja  &amp;amp;mdash; Emisja światła pod wpływem promieniowania jonizującego:&lt;br /&gt;
** rentgenoluminescencja &amp;amp;mdash; wywołana promieniowaniem rentgenowskim,&lt;br /&gt;
** radioluminescencja &amp;amp;mdash; świecenie pod wpływem promieniowania alfa α, beta β, gamma γ&lt;br /&gt;
Z punktu widzenia detekcji promieniowania rentgenowskiego w diagnostyce medycznej, najważniejszymi zjawiskiem jest scyntylacja, a w szczególności rentgenoluminescencja.  W żargonie technicznym dotyczącym aparatury rentgenowskiej rzadko jednak mówi się o rentgenoluminescencja, stojąc terminy scyntylacja lub luminescencja. Należy jednak pamiętać jak szeroką klasę zjawisk obejmuje określenie luminescencji. &lt;br /&gt;
Warto również wiedzieć, iż scyntylacja jest jednym z rodzajów  Fotoluminescencji, w przypadku której wyróżniamy fluorescencję oraz fosforescencję, które w zależności od dalszych procesów zachodzących w trakcie detekcji promieniowania rentgenowskiego mogą wpływać korzystnie lub niekorzystnie na powstawanie obrazu. &lt;br /&gt;
Opiszemy teraz rozwiązania techniczne, które umożliwiły wykorzystanie zjawiska luminescencji do detekcji promieniowania X.&lt;br /&gt;
&lt;br /&gt;
Luminofor nanoszony jest na powierzchnię wykonaną z tworzywa sztucznego, tworząc tzw. ekran wzmacniający.  Pomiędzy dwa ekrany wzmacniające wprowadzany jest film pokryty obustronnie emulsją fotograficzną. Całość (dwa ekrany wzmacniające oraz film) tworzy tzw. kasetę. W celu podwyższenia skuteczności konwersji promieniowania X na światło stosowane są dodatkowe rozwiązania. Przede wszystkim,  powierzchnię na której ma być umieszczony luminofor pokrywa się najpierw warstwą odbijającą światło. Wiadomo, że światło, wytworzone w luminoforze pod wpływem promieniowania X będzie emitowane we wszystkich kierunkach. W związku z tym, do kliszy fotograficznej dotrze tylko 50% światła widzialnego. Zadaniem warstwy odbijającej ekranu wzmacniającego jest ponowne skierowanie światła w kierunku emulsji fotograficznej. Należy jednak pamiętać, iż na jakość otrzymywanego w diagnostyce medycznej obrazu mają wpływ głównie  dwa parametry &amp;amp;mdash; kontrast oraz rozdzielczość przestrzenna. Nie zawsze jest możliwe polepszanie wartości obydwu tych parametrów na raz, czego przykładem są właśnie układy ekran wzmacniający &amp;amp;mdash; emulsja fotograficzna. Stosowanie filmu obustronnie pokrytego emulsją światłoczułą, zastosowanie dwóch ekranów wzmacniających oraz warstw odbijających zwiększa skuteczność konwersji promieniowania X na światło widzialne. Z drugiej strony w układzie takim powstają wielokrotne odbicia, które powodują rozmazanie obrazu, jeśli światło padające na jedną stronę kliszy nie zostanie przez nią zaabsorbowane,  utworzy obraz po drugiej stronie również skutkując rozmazaniem obrazu. Ponadto gruba warstwa luminoforu prowadzi także do rozproszenia światła i dalszej degradacji jakości obrazu.&lt;br /&gt;
W związku z tym kasety dostępne są w różnych konfiguracjach, charakteryzujących się różną grubością ziarna luminofora i grubością warstwy luminofora, rodzajem filmu (jednostronnie lub dwustronnie pokrytego emulsją).&lt;br /&gt;
Nie ulega jednak wątpliwości, iż zastosowanie kaset z ekranami wzmacniającymi korzystnie wpłynęło na jakość obrazów w diagnostyce medyczne, a także zredukowanie dawki promieniowania X pochłoniętej przez pacjenta (od około 20 do 100 razy).&lt;br /&gt;
&lt;br /&gt;
===Charakterystyka filmu===&lt;br /&gt;
[[File:ekspozycja_1.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:ekspozycja_1&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Krzywa charakterystyczna filmu RTG, zaznaczona ciągłą linią koloru czarnego. Kontrast uzyskiwany na filmie jest pochodną krzywej charakterystycznej. Przebieg zależności kontrastu w funkcji ekspozycji zaznaczono czarną linią przerywaną. Pionowymi liniami zielonymi zaznaczono obszar, w którym krzywa charakterystyczna jest funkcją liniową, w związku z czym kontrast jest stały. W zakresie od 0 do wartości oznaczonej pierwszą pionową linią czerwoną film jest niedoświetlony. W zakresie od drugiej pionowej linii czerwonej do maksymalnego zakresu ekspozycji film jest prześwietlony.]]&lt;br /&gt;
[[File:ekspozycja_2.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:ekspozycja_2&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Krzywa charakterystyczna dla dwóch różnych typów filmu RTG. Krzywa oznaczona kolorem zielonym charakteryzuje się szerszym obszarem liniowości, dzięki czemu do wykonywania zdjęć można dogodniej dobrać wartość ekspozycji. W przypadku filmu o krzywej charakterystycznej oznaczonej kolorem czerwonym, obszar w którym gęstość optyczna liniowo zależy od ekspozycji jest znacznie węższy, w związku z czym film ten można łatwo prześwietlić lub niedoświetlić. Z kolei film ten będzie charakteryzował się większą dynamiką zmian kontrastu (niewielka zmiana ekspozycji powoduje znaczne zmiany kontrastu).]]&lt;br /&gt;
&lt;br /&gt;
Jednym z najważniejszych parametrów charakteryzujących filmy wykorzystywane w klasycznej diagnostyce rentgenowskiej jest tzw. gęstość optyczna.  Zrozumienie tego parametru oraz jego zależność od ekspozycji umożliwi również zrozumienie przyczyn  intensywnych badań nad detektorami cyfrowymi, które  wypierają filmy z zastosowań w diagnostyce medycznej.&lt;br /&gt;
Zdefiniujmy na początku stopień zaczernienia filmu w wyniku ekspozycji. W tym celu możemy zmierzyć transmisję promieniowania przechodzące przez kliszę. Stopień zaczernienia filmu jest natężenia promieniowania przechodzącego przez klisze &amp;lt;math&amp;gt;I&amp;lt;/math&amp;gt; do natężenia padającego na kliszę &amp;lt;math&amp;gt;I_0&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; T = \frac{I}{I_0}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Gęstość optyczna to:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; D =-log_{10}(T) = log_{10}\frac{I_0}{I} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Zakres gęstości optycznej zaprezentowano w poniższej tabeli:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! T&lt;br /&gt;
 ! D&lt;br /&gt;
 ! Skutek&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | Szczątkowe naświetlenie, będące np. efektem  przypadkowej emisji światła przez kasetę.&lt;br /&gt;
 |-&lt;br /&gt;
 | 0.1&lt;br /&gt;
 | 1&lt;br /&gt;
 | Film szarawy.&lt;br /&gt;
 |-&lt;br /&gt;
 | 0.01&lt;br /&gt;
 | 2&lt;br /&gt;
 | Film zaczerniony.&lt;br /&gt;
 |-&lt;br /&gt;
 | 0.001&lt;br /&gt;
 | 3&lt;br /&gt;
 | Film bardzo zaczerniony.&lt;br /&gt;
 |-&lt;br /&gt;
 | 0.00025&lt;br /&gt;
 | 3.6&lt;br /&gt;
 | Maksymalne zaczernienie stosowane w diagnostyce medycznej.&lt;br /&gt;
 |}&lt;br /&gt;
Użyteczny zakres gęstości optycznej to 0.5 – 2.2. &lt;br /&gt;
Wprowadźmy teraz pojęcie ekspozycji. Ekspozycja to ilość promieniowania padającego na detektor w trakcie wykonywania zdjęcia.  Wielkość ta, co jest oczywiste, będzie zależeć  zarówno od natężenie promieniowania padającego oraz czasu wykonywania zdjęcia.  Na rysunku &amp;lt;xr id=&amp;quot;fig:ekspozycja_1&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt; zaprezentowano zależność gęstości optycznej od ekspozycji, którą nazywamy Krzywą Charakterystyczną Filmu.  Jak można zauważyć, zależność ta tylko w pewnym obszarze jest liniowa.  Tymczasem kontrast obrazu uzyskiwanego na kliszy to nachylenie (pochodna) gęstości optycznej względem ekspozycji. Na rysunku &amp;lt;xr id=&amp;quot;fig:ekspozycja_1&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;. możemy wyróżnić trzy obszary Krzywą Charakterystyczną Filmu:&lt;br /&gt;
* obszar, w którym gęstość optyczna jest niewielka i słabo zależy od ekspozycji &amp;amp;mdash; jest to obszar w którym film jest niedoświetlony,&lt;br /&gt;
* obszar, w którym gęstość optyczna jest duża  i słabo zależy od ekspozycji &amp;amp;mdash; jest to obszar w którym film jest prześwietlony,&lt;br /&gt;
* obszar, w którym gęstość optyczna zależy liniowo od ekspozycji &amp;amp;mdash; w tym obszarze kontrast jest stały.&lt;br /&gt;
&lt;br /&gt;
Nieliniowa zależność gęstości optycznej od ekspozycji to jedna z głównych wad filmów, co prześledzimy na następującym przykładzie. Załóżmy iż wykonujemy zdjęcie rentgenowskie dwóch tkanek pacjenta &amp;amp;mdash; A i B, które znacznie różnią się liniowym współczynnikiem osłabienia promieniowania  X.  Tkanka A silnie tłumi promieniowanie X, podczas gdy tkanka B osłania to promieniowanie nieznacznie. Kontrast uzyskanego zdjęcia jest funkcją ekspozycji. Z kolei ekspozycja zależy od natężenia promieniowania padającego na kliszę. Natężenie promieniowania, które dociera do kliszy, zależy od stopnia jego osłabienia przez narządy. Chcąc dobrze odwzorować tkankę B, film powinien być naświetlany krótko, gdyż tkanka ta niewiele osłabia promieniowanie. Z kolei w przypadku tkanki A, która silnie osłabiła promieniowanie rentgenowskie, czas ekspozycji powinien być wydłużony.  Niestety, tylko pewien ograniczony zakres ekspozycji prowadzi do wytworzenia odpowiedniego kontrastu. Starając się dobrać ekspozycję jednocześnie dla tkanki A i B można łatwo doprowadzić do prześwietlenia lub niedoświetlania filmu.&lt;br /&gt;
Pewnym rozwiązaniem tego problemu jest wytworzenie filmu o jak szerszym zakresie liniowej zależności gęstości optycznej od ekspozycji. W takim przypadku jednak gęstość optyczna będzie narastać wolno, a w związku z tym i kontrast (który jest pochodzą gęstości optycznej po ekspozycji) będzie miał małą wartość. W zależności, na którym parametrze bardziej nam zależy, czy wysokim kontraście, czy szerszym zakresie użytecznej ekspozycji wytworzono różne rodzaje filmu, charakteryzowane dodatkowymi parametrami. W podsumowaniu tego rozdziału wymienimy cztery najważniejsze:&lt;br /&gt;
&lt;br /&gt;
*Kontrast &amp;amp;mdash;  Zakres ekspozycji w którym gęstość optyczna zmienia się liniowo. Filmy o szeroki zakresie użytecznej ekspozycji są tzw. filmami o małej dynamice kontrastu. Z kolei filmy o wąskim zakresie użytecznej ekspozycji to filmy o tzw. dużej dynamice kontrastu, które jednakże łatwo prześwietlić lub nie doświetlić.&lt;br /&gt;
* Średni kontrast (ang ''Average Contrast''):&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;C = \frac{D(E_2)-D(E_1)}{E_2 - E_1} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
* Gamma &amp;amp;mdash; kontrast maksymalny.&lt;br /&gt;
* Szybkość uzyskania gęstości optycznej D = 1:&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;S = E^{-1}(D=1) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==System sterowania ekspozycją==&lt;br /&gt;
W rozdziale [https://brain.fuw.edu.pl/edu/Obrazowanie:Obrazowanie_Medyczne/Metody_obrazowania_medycznego_wykorzystuj%C4%85ce_promieniowanie_rentgenowskie#Charakterystyka_filmu] wprowadzone zostało pojęcie ekspozycji,która jest miarą ilości fotonów padających na detektor promieniowania. Ekspozycja zależy od natężenia promieniowania oraz czasu wykonywania badania. Przypominamy, że z kolei natężenie promieniowania rentgenowskiego zależy od materiału z którego wykonana jest anoda, napięcia przyspieszającego &amp;lt;math&amp;gt;U_A&amp;lt;/math&amp;gt; i natężenia prądu anodowego &amp;lt;math&amp;gt;I_A&amp;lt;/math&amp;gt; (wzór (&amp;lt;xr id=&amp;quot;eq:I_U&amp;quot;/&amp;gt;)). Z kolei natężenie prądu anodowego również zależy od napięcia przyspieszającego &amp;lt;math&amp;gt;U_A&amp;lt;/math&amp;gt;, a także materiału z którego wykonana jest katoda oraz natężenia prądu płynącego przez katodę i wywołującego zjawisko termoemisji. Podsumowując, ekspozycja zależy od wielu parametrów, które należy właściwie ustawić. W zależności od tego, które z parametrów są ustawiane automatycznie lub może regulować je technik prowadzący badania wyróżniamy cztery techniki:&lt;br /&gt;
* Technika Trzypunktowa &amp;amp;mdash; napięcie anodowe &amp;lt;math&amp;gt;U_A&amp;lt;/math&amp;gt;, prąd anodowy &amp;lt;math&amp;gt;I_A&amp;lt;/math&amp;gt; i czas wykonywania naświetlenia technik ustawia ręcznie. Przypominamy, że natężenie prądu anodowego &amp;lt;math&amp;gt;I_A&amp;lt;/math&amp;gt; zależy zarówno on natężenia prądu płynącego przez katodę &amp;lt;math&amp;gt;I_K&amp;lt;/math&amp;gt;jak i napięcie przyspieszającego &amp;lt;math&amp;gt;U_A&amp;lt;/math&amp;gt;. Jednakże prąd &amp;lt;math&amp;gt;I_A&amp;lt;/math&amp;gt; jest proporcjonalny do prądu &amp;lt;math&amp;gt;I_K&amp;lt;/math&amp;gt; w związku z tym regulacja prądu anodowego odbywa się głównie poprzez zmiany prądu płynącego przez katodę. &lt;br /&gt;
* technika dwupunktowa &amp;amp;mdash; w przypadku tej techniki wprowadza się dodatkową wielkość &amp;amp;mdash; miliampero-sekundy (mAs):&lt;br /&gt;
&amp;lt;equation&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\text{mAs} = I_A\cdot t [A\cdot s]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie &lt;br /&gt;
&amp;lt;math&amp;gt;I_A&amp;lt;/math&amp;gt; &amp;amp;mdash; prąd anodowy (prąd płynący od anody do katody),&lt;br /&gt;
&amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;   &amp;amp;mdash; czas wykonywania ekspozycji.&lt;br /&gt;
Przykładowo, jeśli prąd anodowy &amp;lt;math&amp;gt;I_A&amp;lt;/math&amp;gt; wynosi 400 mA, zaś czas ekspozycji 500 ms, to współczynnik mAs = 200 mAs. &lt;br /&gt;
Operator ustawia ręcznie dwa parametry napięcie przyspieszające i parametr mAs.&lt;br /&gt;
* technika jednopunktowa &amp;amp;mdash; operator ustawia ręcznie wartość napięcia przyspieszającego,  pozostałe parametry dobiera automat na podstawie sygnału, umieszczonych przed kasetą, z detektorów promieniowania,&lt;br /&gt;
* technika zero-punktowa &amp;amp;mdash;  wszystkie parametry są dobierane automatycznie&lt;br /&gt;
&lt;br /&gt;
==Wzmacniacze Obrazu==&lt;br /&gt;
[[File:wzmacniacz_obrazu.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:wzmacniacz_obrazu&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Schemat budowy wzmacniacza obrazu. (Rysunek pochodzi ze strony [2] i został udostępnionego przez dra Jacka Rumińskiego, za co autor niniejszych materiałów serdecznie dziękuje).]]&lt;br /&gt;
&lt;br /&gt;
Niezwykle ważne w diagnostyce medycznej jest uzyskiwanie obrazów w czasie rzeczywistym. Do lat 50-tych ubiegłego wieku w celu uzyskiwania takich obrazów stosowano ekrany fluoroskopowe. Wadą tych ekranów była niewielka jasność i kontrastowa, przez co lekarz musiał adaptować  wzrok do ciemności panującej w pokoju w którym przeprowadzano badanie.  Ekrany fluoroskopowe zastąpiono wzmacniaczami obrazu, jednakże do dzisiaj w radiologii funkcjonuje nazwa „fluoroskopia”.&lt;br /&gt;
===Budowa i zasada działania wzmacniacza obrazu ===&lt;br /&gt;
Schemat wzmacniacza obrazu zaprezentowano na &amp;lt;xr id=&amp;quot;fig:wzmacniacz_obrazu&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;, podstawowe elementy to luminofor wejściowy, fotokatoda, układy przyspieszające wraz z optyką elektronowa, luminofor wyjściowy.&lt;br /&gt;
* Luminofor wejściowy konwertuje promieniowanie rentgenowskie na promieniowanie widzialne. Materiałem wykorzystywanym w procesie luminescencji to  jodek cezu (CsI) domieszkowanego sodem (Na), który umieszcza się na podłożu aluminiowym. Kryształy  (CsI:Na) pod wpływem absorpcji promieniowania X świecą światłem niebieskim Światło to dociera następnie do fotokatody.&lt;br /&gt;
* Fotokatoda &amp;amp;mdash; pod wpływem światła emitowanego przez luminofor emituje elektrony.&lt;br /&gt;
* Układy przyspieszające i optyka elektronowa. Wytworzone przez katodę elektrony są przyspieszane napięciem 25 keV do 35 keV oraz ogniskowane przez odpowiednio skonfigurowaną optykę elektronową.&lt;br /&gt;
* Luminoforu Wyjściowy Luminofor emituje, w odpowiedzi na absorpcje elektronów, zielone światło. Dodatkowo, na warstwę luminoforu nałożona jest cienka warstwa aluminium, która jest jednocześnie anodą układu.&lt;br /&gt;
&lt;br /&gt;
==Detektory Cyfrowe==&lt;br /&gt;
Detektory  cyfrowe  można podzielić na dwie grupy i skojarzone z nimi metody klasycznej radiografii:&lt;br /&gt;
* Radiografia fosforowa (tzw. półcyfrowa),&lt;br /&gt;
* Radiografia cyfrowa bezpośrednia.&lt;br /&gt;
Detektory cyfrowe promieniowania X zostały opracowane w roku 1987 przez Francisa Mouyena. System obrazowania oparty na tych detektorach zaprezentowano dwa lata później a opatentowano pod nazwą radiowizjografia. Nazwa ta jest zastrzeżona dla produktów firmy Trophy Radiologie. Inne firmy stosują nazwę radiografii cyfrowej.  Innymi słowy: Radiowizjografia = Radiografia cyfrowa bezpośrednia.&lt;br /&gt;
&lt;br /&gt;
===Radiografia półcyfrowa (ang. Computed Radiography, CR)===&lt;br /&gt;
W latach 80-tych wprowadzono technologię, umożliwiającą wygodną akwizycję zdjęć rentgenowskich na cyfrowych nośnikach danych i ich analizę obrazu na ekranie komputerowym. Technologia ta wykorzystuje kasety kompatybilne z kasetami przeznaczonymi dla klasycznych filmów, jednakże wewnątrz kasety zamiast materiału z emulsją światłoczułą znajdował specjalny fotoczuły ekran fosforowy. Pod wpływem promieniowania X elektrony w atomach wchodzących w skład ekranu wchodziły na wyższe poziomy energetyczne.  Cechą charakterystyczną zastosowanego materiału jest fakt, iż powrót atomów ze stanu wzbudzonego do stanu podstawowego nie następuje gwałtownie szybko. Atomy pozostają w stanie wzbudzonym dopóki  nie zostaną z niego wytrącone np. za pomocą światła laserowego.  Obraz diagnostyczny zapisany w ten sposób nazywamy obrazem utajonym, zaś stan w którym znajdują się atomy stanem metastabilnym. Po zakończeniu badania, kaset naświetlana jest światłem laserowym, elektrony uwolnione ze stanu metastabilnego emitują światło, które następnie jest odbierane i wzmacniane przez fotopowielacz. Wzmocnione światło jest następnie zamieniane na sygnał cyfrowy. Po zeskanowaniu obrazu kaseta jest kasowana za pomocą specjalnej lampy i może być użyta po raz ponowny.&lt;br /&gt;
&lt;br /&gt;
===Radiografia cyfrowa (ang. Digital Radiography, DR)===&lt;br /&gt;
[[File:ekspozycja_3.png|300px|thumb|right|&amp;lt;figure id=&amp;quot;fig:ekspozycja_3&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Krzywa charakterystyczna detektora cyfrowego. Krzywa może być opisana funkcją liniową, dzięki czemu uzyskiwany kontrast jest niezależny od ekspozycji.]]&lt;br /&gt;
&lt;br /&gt;
Pod koniec lat osiemdziesiątych ubiegłego wieku do stomatologii zostały wprowadzone pierwsze detektory umożliwiające uzyskanie zdjęcia rentgenowskiego bez wykonywania pośrednich kroków, takich jak np. skanowanie filmu. Wynalazca metody &amp;amp;mdash; Francis Mouyen, opatentował swoje odkrycie pod nazwą radiowizjografia (''radio'' &amp;amp;mdash; wytwarzającego promieniowanie, ''visio'' &amp;amp;mdash; rejestrującego obraz, ''graphy'' &amp;amp;mdash; wyświetlającego obraz). Obecnie różnorodne formy cyfrowej detekcji promieniowania X określone są jako Radiografia Cyfrowa (ang. ''Digital Radiography'', DR) lub Radiografia Bezpośrednia. Dotychczas opracowana kilka rodzajów detektorów cyfrowych, z których omówimy najważniejszy &amp;amp;mdash; detektor wykorzystujący amorficzny krzem. &amp;lt;br&amp;gt;&lt;br /&gt;
Podstawowym elementem w radiografii cyfrowej jest matryca detektorów (ang. ''Flat Panel Detectors'', FPDs). Pojedynczy detektor, odpowiedzialny za wytworzenie jednego piksela na obrazie, składa się z:&lt;br /&gt;
* fotodiody wykonanej z amorficzngo krzemu,&lt;br /&gt;
* materiału scyntylacyjnego &amp;amp;mdash; warstwy jodku cezu,&lt;br /&gt;
* układu regulującego.&lt;br /&gt;
&lt;br /&gt;
Amorficzny krzem z uwagi na swoje właściwości jest masowo wykorzystywany w budowie ekranów LCD oraz ogniw fotogalwanicznych. Wśród jego zalet można wymienić m.in:&lt;br /&gt;
# Duży współczynnik absorpcji i transmisji promieniowania elektromagnetycznego w zakresie widzialnym.&lt;br /&gt;
# Prosta technologia otrzymywania.&lt;br /&gt;
&lt;br /&gt;
Rolą fotodiody wykonanej z amorficznego krzemu jest konwersja promieniowania elektromagnetycznego na ładunek.Niestety, tego rodzaju fotodiody są bardzo słabo czułe na promieniowanie rentgenowskie, dlatego pokrywa się je materiałem scyntylacyjnym, jakim jest jodek cezu. Pod wpływem promieniowania świetlnego w fotodioda wytwarza ładunek elektryczny wprost proporcjonalny do ilości padających na detektor fotonów rentgenowskich. Jest to niezwykle istotna zaleta detektorów cyfrowych, dzięki której zależność &amp;quot;zaczernienia&amp;quot; obrazu jest liniową funkcją ekspozycji (patrz &amp;lt;xr id=&amp;quot;fig:ekspozycja_3&amp;quot;&amp;gt;rys. %i&amp;lt;/xr&amp;gt;). W przypadku radiografii klasycznej zależność ta była nieliniowa. Ładunek wytworzony przez fotodiodę jest gromadzony w elemencie pojemnościowym a następnie odczytywany przez odpowiednie układy elektroniczne wchodzące w skład matrycy.&lt;/div&gt;</summary>
		<author><name>Rjb</name></author>
		
	</entry>
</feed>