Wprowadzenie do Pythona

1 Wprowadzenie do Pythona ...
Author: Dorota Czajkowska
0 downloads 2 Views

1 Wprowadzenie do Pythona

2 https://docs.python.org pydoc

3 Banalne sprawy # komentujemy linię “””komentarz lub dokumentacja”””#!/usr/bin/env python ścieżka do używanej wersji Pythona

4 Banalne przykłady x = 25 # obiekt x ma teraz przypisaną wartość 25print x # wyświetla wartość 25 x = 'aa' # teraz zmienna x została nadpisana przez string 'aa' print x # wyświetla ciąg znaków 'aa' del x # obiekt x będzie teraz niezdefiniowany print x # wyświetla się błąd ("exception") y = None # teraz wartość y definiujemy jako... None print y # wyświetla wartość None

5 Pętle if : elif : else: while: w obrębie bloku możemy wstawić break lub continue for in :

6 Przykłady pętli a = 23 b = 45 if a > b:print a, 'is greater than', b elif a == b: print a, 'is equal to', b else: print a, 'is smaller than', b while a < b: print a, b a = a * 2

7 Zmienne Liczbowe: Typy: int, long, float, complexx j Operatory:+ - * ** / // % ~ & | ^ << >> Wbudowane funkcje: abs min max pow round sum Stringi: plain i unicode 'single' "double" u"nicode" \n &c Operatory: + (cat), * (rep), % (format) Wbudowane funkcje: chr ord unichr Bardzo przydatne wbudowane funkcje: capitalize, center

8 Typy zbiorcze tuple: niezmienna sekwencja() (23,) (23, 45) tuple('ciao') list: zmienna sekwencja (faktycznie jest "wektorem") [] [23] [23, 45] list('ciao') set oraz frozenset: tablice haszujące set() set((23,)) set('ciao') dict: mapowanie key->value przez tablicę {} {2:3} {4:5, 6:7} dict(ci='ao')

9 Słowniki dict = {} dict['a'] = 'alpha' dict['g'] = 'gamma'  dict['o'] = 'omega'   print dict  ## {'a': 'alpha', 'o': 'omega', 'g': 'gamma'}   print dict['a']     ## Simple lookup, returns 'alpha'   dict['a'] = 6       ## Put new key/value into dict   'a' in dict         ## True   ## print dict['z']                  ## Throws KeyError   if 'z' in dict: print dict['z']     ## Avoid KeyError   print dict.get('z')  ## None (instead of KeyError)

10 Słowniki ## By default, iterating over a dict iterates over its keys.## Note that the keys are in a random order. for key in dict: print key     ## Exactly the same as above  for key in dict.keys(): print key  ## Get the .keys() list:  print dict.keys()  ## ['a', 'o', 'g']  ## Likewise, there's a .values() list of values  print dict.values()  ## ['alpha', 'omega', 'gamma'] https://developers.google.com/edu/python/dict-files

11 Słowniki ## Dodawanie elementów >>> x = {1:2}>>> print x {1: 2} >>> x.update({3:4}) {1: 2, 3: 4}

12 Słowniki

13 Typy zbiorcze Funkcje, które są dostępne dla typów zbiorczych len(c)pętle: (for x in c) weryfikacja zawierania się (if x in c) del list[-2:] #usuwanie ostatnich dwóch el. z listy del dict[b] usuwanie elementu ze słowinka dict = {'a':1, 'b':2, 'c':3} cmp(dict1, dict2)

14 Typy zbiorcze Stringi, tuple i listy są w Pythonie traktowane jako sekwencje, można na nich stosować takie same operacje jak na sekwencjach: powtarzanie (c*N), łączenie (c1+c2) wybieranie elementów na podstawie indeksu c[i] wybieranie podzbioru c[i:j] i c[i:j:k]: 'ciao'[2]=='a', 'ciao'[3:1:-1]=='oa' Słowniki (dict) i zbiory (set) nie są sekwencjami

15 Ćwiczenie 1 Przy pomocy słownika stwórz “bazę” miast w Polsce z województwami, w których występują. Program ma pozwalać użytkownikowi na wczytanie kolejnych par, a następnie ma wypisywać wszystkie nazwy miast w kolejności alfabetycznej

16 Weryfikacja wartości, przyrównanie== != is is not < > <= >= in not in 3 <= x < 9 not x == not bool(x) dla każdego x and or

17 Wyjątki Błędy i anomalie, które nie są błędami, powodują wystąpienie wyjątków (wywołanie instancji klasy Exception albo podklasy z grupy Exception) Błędy, które nie są wychwycone powodują zakończenie działania programu Jeśli chcemy wychwycić wyjątki używamy wyrażenia try/except lub try/finally

18 Iteratory i pętle for for i in c: _t = iter(c)while True: try: i = _t.next() except StopIteration: break ( for i in c )

19 Funkcje def (): jest kompilowane na bieżąco brak lub zmienne lokalne, inicjalizowane w momencie wywołania funkcji; opcjonalnie mogą wyglądać * (tuple stanowiący dowolną liczbę pozycjonalnych argumentów) I/lub ** (słownik posiadający dowolną liczbę nazwanych argumentów)

20 Funkcje - przykłady def sumsq(a, b): return a*a+b*bprint sumsq(23, 45) Lub bardziej ogólnie: def sumsq(*a): return sum(x*x for x in a) Inny sposób (C-podobny ;-)) def sumsq(*a): total = 0 for x in a: total += x*x return total

21 Generatory Funkcje, które używają słowa kluczowego yield, zamiast return (yield zwraca generator) Zakończenie fukcji powoduje wystąpienie wyjątku StopIteration, który jest przechwytywany. def enumerate(seq): #funkcja wbudowana n = 0 for item in seq: yield n, item n += 1

22 Generatory >>> mylist = [x*x for x in range(3)]>>> for i in mylist: print(i)

23 Generatory >>> def createGenerator(): ... mylist = range(3)for i in mylist: yield i*i >>> mygenerator = createGenerator() # tworzymy generator >>> print(mygenerator) # mygenerator is an object! >>> for i in mygenerator: print(i)

24 Ćwiczenie 2 Implementacja ciągu Fibonacciego z użyciem generatorów

25 Ćwiczenie 2 - rozwiązaniedef fibonacci(): i = j = 1 while True: r, i, j = i, j, i + j yield r for rabbits in fibonacci(): print rabbits, if rabbits > 100: break

26 Domknięcie To obiekt wiążący funkcję oraz środowisko, w jakim ta funkcja ma działać. Środowisko przechowuje wszystkie obiekty wykorzystywane przez funkcję, niedostępne w globalnym zakresie widoczności. [Wikipedia] def makeAdder(addend): def adder(augend): return augend + addend return adder a23 = makeAdder(23) a42 = makeAdder(42) print a23(100), a42(100), a23(a42(100))

27 Dekoratory >>> def outer(some_func): ... def inner():print "before some_func" ret = some_func() # 1 return ret + 1 return inner >>> def foo(): return 1 >>> decorated = outer(foo) # 2 >>> decorated() before some_func 2 Dekorator pobiera jako argument funkcję i “opakowuje” ją w nową funkcję “dekorującą”:

28 Dekoratory @ def etc, etcOznacza to samo co: = () Dekorator pobiera jako argument funkcję i “opakowuje” ją w nową funkcję “dekorującą”:

29 Klasy class (): to sekwencja definicji i przypisań, wszystkie zmienne zdefiniowane tutaj stają się atrybutami klasy, a funkcje metodami, są one dziedziczone, mogą zostać przesłonięte class MyClass: """najprostszy przykład""" i = 12345 def f(self): return 'hello world'

30 Klasy Aby stworzyć instancję klasy wystarczy ją wywołać:>>> class Complex: def __init__(self, realpart, imagpart): self.r = realpart self.i = imagpart ... >>> x = Complex(3.0, -4.5) >>> x.r, x.i (3.0, -4.5) Dekorator pobiera jako argument funkcję i “opakowuje” ją w nową funkcję “dekorującą”:

31 Klasy - dziedziczenie class eg(object): cla = [] # class attributedef __init__(self): # inst. initializer self.ins = {} # inst. atttribute def meth1(self, x): # a method self.cla.append(x) def meth2(self, y, z): # another method self.ins[y] = z es1 = eg() es2 = eg()

32 Klasy - dziedziczenie class sub(eg):def meth2(self, x, y=1): # override eg.meth2(self, x, y) # super-call class repeater(list): def append(self, x): for i in 1, 2: list.append(self, x) class data_overrider(sub): cla = repeater()

33 Funkcja property class blah(object): def getter(self): return ...def setter(self, value): ... name = property(getter, setter) inst = blah() print inst.name # same as inst.getter() inst.name = 23 # same as inst.setter(23) Why properties matter you never need to "hide" attributes behind getter/setter methods to remain flexible just expose interesting attributes directly if your next release needs a getter to compute the value, and/or a setter, just code the new methods as needed, and wrap them up into a property all code using your class keeps working! down with boilerplate -- never code like: def getFoo(self): return self._foo

34 Ćwiczenie 3 Zaimplementuj klasę Seq, zdefiniuj w niej następujące metody: - tworzącą obiekt Seq - zwracającą pełną sekwencję jako string (zastosuj funkcję str(my_seq)) - porównującą sekwencję z drugą sekwencją lub stringiem - zwracającą długość sekwencji (użyj funkcji len(my_seq)) - zwracającą podciąg sekwencji dla zadanych wartości indeksów - dodającą inną sekwencję lub string do danej, z obu stron, do wyboru - zamieniającą wszystkie znaki sekwencji na wielkie litery - zamieniającą wszystkie znaki sekwencji na małe litery - zwracającą sekwencję komplementarną, jeśli sekwencja jest sekwencją DNA (A<->T, C<->G)

35 Ćwiczenie 4 Stwórz nową klasę DNA_Seq, która będzie dziedziczyła po klasie Seq. Ponadto będzie przesłaniała ostatnią metodę tej klasy (brak sprawdzania czy sekwencja jest sekwencją DNA). Wczytaj kod genetyczny jako słownik Zamiplementuj metodę w klasie DNA_Seq, która będzie przeprowadzała “translację” z użyciem wczytanego kodu

36 “Metody specjalnie” Zaczynają I kończą się dwoma podkreśleniami__new__ __init__ __del__# init/final. __repr__ __str__ __int__# conversions __lt__ __gt__ __eq__ ...# comparisons __add__ __sub__ __mul__ ... # arithmetic __call__ __hash__ __nonzero_ ... __getattr__ __setattr__ __delattr__ __getitem__ __setitem__ __delitem__ __len__ __iter__ __contains__

37 “Metody specjalnie” Python wywołuje metody specjalne dla danego typu w momencie kiedy wywołujemy instancję tego typu Nie wywołujemy tych funkcji bezpośrednio! Funkcje wbudowane robią to poprawnie za nas :) Przykładowo abs(x) nie x.__abs__()

38 “Metody specjalnie” Jest bardzo dużo ciekawych funkcji wbudowanych:abs any all chr cmp compile dir enumerate eval getattr hasattr hex id intern isinstance iter len max min oct open ord pow range repr reversed round setattr sorted sum unichr xrange zip... Aby korzystać z dodatkowych funkcji importujemy odpowiednie biblioteki

39 Przykład # build word -> [list of linenumbers] map indx = {}with open(filename) as f: for n, line in enumerate(f): for word in line.split(): indx.setdefault(word, []).append(n) # display by alphabetical-ordered word for word in sorted(indx): print "%s:" % word, for n in indx[word]: print n, print

40 Import modułów import from import import długa_nazwa_modułu as krótka_nazwa_modułu from długa_nazwa_modułu import *

41 Ćwiczenie 5 Przy pomocy narzędzia Pydoc proszę sprawdzić jakie możliwości dają biblioteki os, sys, math, następnie zaimportować je i chwilę się “pobawić” :)

42 Import modułów Każdy plik mój_plik.py może być traktowany jako moduł. Wystarczy go zaimportować: import mój_plik Plik ten musi być umieszczony w odpowiedniej ścieżce Można również zaimportować pliki z rozszerzeniem .pyc automatycznie tworzone przez kompilator Pythona w czasie importu pliku źródłowego Można również zaimportować plik binarny (plik.pyd), zaimplementowany na przykład w C

43 Pakiety To moduły zawierające inne modułyPakiety są umieszczone w jednym katalogu, wraz z plikiem __init__.py Plik ten jest często pusty, wskazuje natomiast na to, że dany moduł jest pakietem Podmoduły to są podkatalogi w głównym katalogu, które również mają umieszczone pliki __init.py__ Główny katalog musi być umieszczony w odpowiedniej ścieżce

44 Operacje na plikach Otwieranie pliku do czytania input = open('data', 'r') Wczytanie zawartości pliku do obiektu S S = input.read() Wczytanie N bajtów z pliku S = input.read(N) Wczytanie jednej linii do S S =input.readline() Wczytanie całek pliku jako listy stringów L = input.readlines() Otwieranie pliku do pisania output = open('/tmp/spam', 'w') Pisanie stringu do pliku output.write(S) Pisanie listy stringów do pliku output.writelines(L) Zamknięcie pliku output.close()

45 Operacje na plikach >>> try: >>> f = open('blah')>>> except IOError: >>> print 'could not open file' Klasa IOError obsługuje wyjątki dotyczące otwierania plików, zapisywania do plików i czytania z nich

46 Funkcja main import time, threaddef myfunction(string, sleeptime, lock, *args): while 1: lock.acquire() time.sleep(sleeptime) lock.release() if __name__ == "__main__": lock = thread.allocate_lock() thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock)) thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))

47 Funkcja main Dodając instrukcję if __name__=='__main__': funkcja() definiujemy w budowanym przez nas module część kodu, która będzie interpretowana tylko w przypadku bezpośredniego wywołania modułu W momencie importu napisanego przez nas programu jak modułu do innego programu, zawarte w fukcji main polecenia nie będą przez kompilator interpretowane

48 Jeszcze o przyrównaniach>>> L1=[1, ('a', 3)] >>> L2=[1, ('a', 3)] >>> L1==L2 True >>> L1 is L2 False >>> Operator == bada identyczność zawartości obiektów Operator is bada czy dwa obiekty są tym samym obiektem

49 Jeszcze o pętlach W Pythonie nie istnieje pętla switch/case. Tego typu konstrukcję implementujemy z użyciem słownika: >>> result = { >>> 'a': lambda x: x * 5, >>> 'b': lambda x: x + 7, >>> 'c': lambda x: x - 2 >>>} >>> result['b'](10)

50 Jeszcze o funkcjach W Pythonie nie istnieje pętla switch/case. Tego typu konstrukcję implementujemy z użyciem słownika: >>> result = { >>> 'a': lambda x: x * 5, >>> 'b': lambda x: x + 7, >>> 'c': lambda x: x - 2 >>>} >>> result['b'](10)

51 Jeszcze o funkcjach Konstrukcja lambda służy do budowy funkcji “anonimowych” (nie ma przypisanej do nich żadnej nazwy). Są one wykonywane na bieżąco. >>> def make_incrementor (n): return lambda x: x + n >>> f = make_incrementor(2) >>> g = make_incrementor(6) >>> print f(42), g(42) 44 48 >>> >>> print make_incrementor(22)(33) 55 The above code defines a function "make_incrementor" that creates an anonymous function on the fly and returns it. The returned function increments its argument by the value that was specified when it was created. You can now create multiple different incrementor functions and assign them to variables, then use them independent from each other. As the last statement demonstrates, you don't even have to assign the function anywhere -- you can just use it instantly and forget it when it's not needed anymore.

52 Jeszcze o funkcjach Konstrukcja lambda często współwystępuje z funkcjami map(), filter() i reduce() >>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27] >>> >>> print filter(lambda x: x % 3 == 0, foo) [18, 9, 24, 12, 27] >>> print map(lambda x: x * , foo) [14, 46, 28, 54, 44, 58, 26, 34, 64] >>> print reduce(lambda x, y: x + y, foo) 139 First we define a simple list of integer values, then we use the standard functions filter(), map() and reduce() to do various things with that list. All of the three functions expect two arguments: A function and a list. Of course, we could define a separate function somewhere else and then use that function's name as an argument to filter() etc., and in fact that's probably a good idea if we're going to use that function several times, or if the function is too complex for writing in a single line. However, if we need it only once and it's quite simple (i.e. it contains just one expression, like in the above examples), it's more convenient to use a lambda construct to generate a (temporary) anonymous function and pass it to filter() immediately. This creates very compact, yet readable code. In the first example, filter() calls our lambda function for each element of the list, and returns a new list that contains only those elements for which the function returned "True". In this case, we get a list of all elements that are multiples of 3. The expression x % 3 == 0 computes the remainder of x divided by 3 and compares the result with 0 (which is true if x is evenly divisible by 3). In the second example, map() is used to convert our list. The given function is called for every element in the original list, and a new list is created which contains the return values from our lambda function. In this case, it computes 2 * x + 10 for every element. Finally, reduce() is somewhat special. The "worker function" for this one must accept two arguments (we've called them x and y here), not just one. The function is called with the first two elements from the list, then with the result of that call and the third element, and so on, until all of the list elements have been handled. This means that our function is called n-1 times if the list contains n elements. The return value of the last call is the result of the reduce() construct. In the above example, it simply adds the arguments, so we get the sum of all elements. (Note: since Python 2.3 there's a built-in function sum()that does the same thing more efficiently.)

53 Ćwiczenie nr 1 Z użyciem funkcji filter() i konstrukcji lambda proszę napisać procedurę, która wypisuje liczby pierwsze z przedziału (2, 50) First we define a simple list of integer values, then we use the standard functions filter(), map() and reduce() to do various things with that list. All of the three functions expect two arguments: A function and a list. Of course, we could define a separate function somewhere else and then use that function's name as an argument to filter() etc., and in fact that's probably a good idea if we're going to use that function several times, or if the function is too complex for writing in a single line. However, if we need it only once and it's quite simple (i.e. it contains just one expression, like in the above examples), it's more convenient to use a lambda construct to generate a (temporary) anonymous function and pass it to filter() immediately. This creates very compact, yet readable code. In the first example, filter() calls our lambda function for each element of the list, and returns a new list that contains only those elements for which the function returned "True". In this case, we get a list of all elements that are multiples of 3. The expression x % 3 == 0 computes the remainder of x divided by 3 and compares the result with 0 (which is true if x is evenly divisible by 3). In the second example, map() is used to convert our list. The given function is called for every element in the original list, and a new list is created which contains the return values from our lambda function. In this case, it computes 2 * x + 10 for every element. Finally, reduce() is somewhat special. The "worker function" for this one must accept two arguments (we've called them x and y here), not just one. The function is called with the first two elements from the list, then with the result of that call and the third element, and so on, until all of the list elements have been handled. This means that our function is called n-1 times if the list contains n elements. The return value of the last call is the result of the reduce() construct. In the above example, it simply adds the arguments, so we get the sum of all elements. (Note: since Python 2.3 there's a built-in function sum()that does the same thing more efficiently.)

54 Ćwiczenie nr 1 >>> nums = range(2, 50)>>> for i in range(2, 8): nums = filter(lambda x: x == i or x % i, nums) ... >>> print nums [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non- zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

55 Przykład użycia map() >>> import commands >>>>>> mount = commands.getoutput('mount -v') >>> lines = mount.splitlines() >>> points = map(lambda line: line.split()[2], lines) >>> print points ['/', '/var', '/usr', '/usr/local', '/tmp', '/proc'] In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

56 Przykład użycia map() >>> print map(lambda x: x.split()[2], commands.getoutput('mount -v').splitlines()) ['/', '/var', '/usr', '/usr/local', '/tmp', '/proc'] In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

57 assert – kolejna ciekawa funkcja>>> x=29 >>> assert x > 0, "x jest mniejsze lub rowne 0" >>> assert x%2 ==0, “x jest nieparzyste!” Traceback (most recent call last): File "", line 1, in AssertionError: x jest nieparzyste! In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

58 Biblioteka NumPy In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

59 NumPy- obliczenia naukowe w PythonieBiblioteka NumPy zawiera m.in.: - N-wymiarowy obiekt tablica (array), na którym można wykonywać wszelakie operacje znane z algebry - podstawowe funkcje znane z algebry liniowej - transformaty Fouriera - biblioteki do generowania liczb losowych - narzędzia do integracji z kodem napisanym w C/C++ oraz w Fortranie In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

60 Typ Array >>> import numpy as np >>>>>> a=np.array([1, 2, 3, 4], float) >>> a >>> array([1., 2., 3., 4.]) >>> b=np.array([1, 2, 3], [4, 5, 6], float) In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

61 Typ Array Tablice są podobne do list, lecz muszą mieć elementy jednego numerycznego typu – int lub float Tablice są przeznaczone do przechowywania danych, na których wykonywane są operacje numeryczne- są dużo wydajniesze od list Elementy z tablic pobieramy tak samo jak z list n.p. A[1] lub b[1][1] Numeracja tablic jest od 0! In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

62 Typ Array - funkcje >>> c.shape >>> (2, 3)Podaje tuple z wymiarami tablicy >>> c.dtype >>>dtype('float64') Podaje typ danych tablicy. W NumPy float64 odpowiada double >>>len(c) >>>2 Podaje wymiar tablicy ale tylko na jednej osi In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

63 Typ Array - funkcje >>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> 2 in a >>> True >>> 0 in a >>> False in sprawdza czy dana wartość jest w tablicy In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

64 Typ Array - funkcje >>> a = np.array(range(10), float)>>> a = a.reshape((5, 2)) array([[ 0., 1.],[ 2., 3.], [ 4., 5.],[ 6., 7.],[ 8., 9.]]) >>> a.shape (5, 2) reshape zmienia kształt tablicy In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

65 Typ Array - funkcje >>> a = np.array([1, 2, 3], float)>>> b = a >>> c = a.copy() >>> a[0] = 0 >>> a array([0., 2., 3.]) >>> b >>> c array([1., 2., 3.]) In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

66 Typ Array - funkcje >>> a = np.array([1, 2, 3], float)>>> a.tolist() [1.0, 2.0, 3.0] >>> list(a) tolist() tworzy z tablicy listę In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

67 Typ Array - funkcje >>> a = array([1, 2, 3], float)>>> s = a.tostring() >>> s '\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\ >>> np.fromstring(s) array([ 1., 2., 3.]) In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

68 Typ Array - funkcje >>> a = np.array(range(6), float).reshape((2, 3)) >>> a array([[ 0., 1., 2.], [ 3., 4., 5.]]) >>> a.transpose() array([[ 0., 3.],[ 1., 4.],[ 2., 5.]]) a.flatten() zamienia tablicę wielowymiarową w wektor In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

69 Typ Array – funkcje matematyczne>>> a = np.array([1,2,3], float) >>> b = np.array([5,2,6], float) >>> a + b array([6., 4., 9.]) >>> a – b array([-4., 0., -3.]) >>> a * b array([5., 4., 18.]) >>> b / a array([5., 1., 2.]) >>> a % b array([1., 0., 3.]) In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

70 Typ Array – iteracje >>> a = np.array([[1, 2], [3, 4], [5, 6]], float) >>> for (x, y) in a: …print x * y >>> a = np.array([2, 4, 3], float) >>> a.sum() 9.0 >>> a.prod() 24.0 In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

71 Typ Array – iteracje >>> a = np.array([[0, 2], [3, -1], [3, 5]], float) >>> a.mean(axis=0) array([ 2., 2.]) >>> a.mean(axis=1) array([ 1., 1., 4.]) >>> a.min(axis=1) array([ 0., -1., 3.]) >>> a.max(axis=0) array([ 3., 5.]) In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

72 Typ Array – funkcje logiczne>>> a = np.array([1, 3, 0], float) >>> np.logical_and(a > 0, a < 3) array([ True, False, False], dtype=bool) >>> b = np.array([True, False, True], bool) >>> np.logical_not(b) array([False, True, False], dtype=bool) >>> c = np.array([False, True, False], bool) >>> np.logical_or(b, c) array([ True, True, False], dtype=bool) In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

73 Typ Array – algebra Mnożenie macierzy>>> a = np.array([[0, 1], [2, 3]], float) >>> b = np.array([2, 3], float) >>> np.dot(b, a) array([ 6., 11.]) Wyznaczniki, odwracanie macierzy można znaleźć w podmodule linalg In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

74 Ćwiczenie 2 Proszę sprawdzić obecność modułu NumPy (import numpy)W przypadku jego braku moduł instalujemy według instrukcji Z bazy danych PDB pobieramy plik 4N8H (PDB file text) In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

75

76 Ćwiczenie 2 Proszę wczytać do tablicy koordytanty atomów z dwóchATOM N MET A N ANISOU 1 N MET A N ATOM 2 CA MET A C Proszę wczytać do tablicy koordytanty atomów z dwóch łańcuchów A oraz B (każdy z osobna) Na podstawie wartości z wyznaczonych tablic obliczyć macierze odległości euklidesowej pomiędzy atomami w każdym łańcuchu Zbadać różnice występujące w tych dwóch macierzach In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

77 Ćwiczenie 2 ATOM N MET A N ANISOU 1 N MET A N ATOM 2 CA MET A C Podzielić wczytane macierze koordynatów na fragmenty po 10 “atomów”, następnie przeszukując parami oba łańcuchy białka znaleźć te fragmenty, które się różnią (odległość euklidesowa >0), zwrócić numery atomów Przerobić koordynaty kartezjańskie na sferyczne, wynik zapisać do pliku PDB, podstawiając koordynaty In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

78 NumPy- generatory liczb pseudolosowychGeneratory liczb znajdują się w podmodule random Liczby są generowane na bazie liczby- zarodka, są więc liczbami pseudolosowymi >>> np.random.seed(293423) Seed musi być typu integer. Jeżeli program posiada “na sztywno” wpisaną liczbę seed za każdym razem będzie generował te same liczby losowe Jeżeli nie użyjemy funkcji seed, Python będzie sam generował liczbę- zarodek, na podstawie aktualnego czasu In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

79 NumPy- generatory liczb pseudolosowychGenerowanie tablicy liczb pseudolosowych >>> np.random.rand(2,3) array([[ , , ], [ , , ]]) >>> np.random.rand(6).reshape((2,3)) array([[ , , ], [ , , ]]) Generowanie liczby losowej z przedziału [0,1] >>> np.random.random() In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

80 NumPy- generatory liczb pseudolosowychGenerowanie liczby typu int, z przedziału (5, 10) >>> np.random.randint(5, 10) 9 Generowanie liczby losowej z rozkładu Poissona (parmater lambda równy 6.0) >>> np.random.poisson(6.0) 5 In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

81 SciPy- rozszerzenie modułu NumPyIn the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).

82 Biblioteki Pythona, które należy znaćos operacje na plikach i procesach os.path operacje na ścieżkach, katalogach time operacje związane z czasem, datami string operacje na stringach math, cmath operacje matematyczne w zbiorze liczb rzeczywistych I zespolonych re wyrażenia regularne In the above case, the filter function simply says: "Leave the element in the list if it is equal to i, or if it leaves a non-zero remainder when divided by i. Otherwise remove it from the list." After the filtering loop finishes, only prime numbers are left, of course. I am not aware of a language in which you can do the same thing with built-in features as compact and as readable as in Python (except for functional programming languages).