Python dla każdego naukowca - 2013
Transkrypt
Python dla każdego naukowca - 2013
PYTHON-2013 Marcin Lewandowski [ [email protected] ] JĘZYK PYTHON – NARZĘDZIE DLA KAŻDEGO NAUKOWCA Dr Marcin Lewandowski [ [email protected] ] Strona kursu: http://us4us.eu/wydarzenia/kursy/ 1 PYTHON-2013 Marcin Lewandowski [ [email protected] ] SCIPY, NUMPY, MATPLOTLIB 2 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Wielka czwórka • NumPy – podstawowy moduł naukowy (obsługa tablic a’la Matlab®) • SciPy – rozbudowany moduł naukowy (numeryka i algorytmy) • Matplotlib – moduł do wykresów 2D • IPy/IPython – interaktywna konsola Pythona http://ipython.scipy.org/moin 3 PYTHON-2013 Marcin Lewandowski [ [email protected] ] NumPy – linki • Strona domowa: http://www.scipy.org/NumPy • Dokumentacja: http://docs.scipy.org/doc/numpy/reference • Przykłady: http://www.scipy.org/Numpy_Example_List_With_Doc • Cookbook: http://www.scipy.org/Cookbook 4 PYTHON-2013 Marcin Lewandowski [ [email protected] ] SciPy – linki • Strona domowa: http://www.scipy.org • Dokumentacja: http://docs.scipy.org/doc/scipy/reference • Cookbook: http://www.scipy.org/Cookbook 5 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Matplotlib – linki • Strona domowa: • • • • http://matplotlib.sourceforge.net Dokumentacja: http://matplotlib.sourceforge.net/users/index.html Przykłady: http://matplotlib.sourceforge.net/examples/index.html Cookbook: http://www.scipy.org/Cookbook/Matplotlib Galeria: http://matplotlib.sourceforge.net/gallery.html 6 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Materiały dodatkowe • Using IPython for parallel computing • • • • • http://ipython.scipy.org/doc/nightly/html/parallel/index.html SciPy 2009 – matplotlib tutorial http://www.archive.org/details/scipy09_introTutorialDay2_1 http://www.archive.org/details/scipy09_advancedTutorialDay1_3 SciPy 2009 – NumPy tutorial http://www.archive.org/details/scipy09_introTutorialDay2_2 http://www.archive.org/details/scipy09_advancedTutorialDay1_1 SciPy 2009 – SciPy for numerics tutorial http://www.archive.org/details/scipy09_introTutorialDay2_4 SciPy 2009 – Cython tutorial http://www.archive.org/details/scipy09_advancedTutorial_6 SciPy 2010 TUTORIALS http://conference.scipy.org/scipy2011/tutorials.html 7 PYTHON-2013 Marcin Lewandowski [ [email protected] ] MATPLOTLIB W PRZYKŁADACH 8 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Sposoby na matpotlib • Trzy sposoby pracy z matplotlib: • matplotlib.pyplot – główny moduł rysujący Matplotlib • pylab – wygodny moduł do pracy interaktywnej; łaczy Matplotlib i NumPy tworząc środowisko a’la Matlab® • OOP – pełny obiektowy interfejs do Matplotlib 9 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Tryb interaktywny/i nie • „Interaktywność” Matplotlib oznacza kiedy wykres jest uaktualniany (odrysowywany): • W trybie interaktywnym po każdej komendzie rysowania (plot) • W trybie nieinteraktywnym tylko po wywołaniu: draw() lub show() • Ipython z opcją -pylab automatycznie włącza tryb interaktywny • Inne możliwości sterowanie trybem pracy: • Flaga w pliku konfiguracji matplotlibrc • Opcja w słowniku matplotlib.rcParams ['interactive'] • Funkcja matplotlib.interactive(True/False) • W Pylab: • isinteractive() – zwraca True dla trybu interaktywnego • ion() – włącza tryb interaktywny • ioff() – wyłącza tryb interaktywny • draw() – wymusza odrysowanie wykresu • PAMIĘTAJ, że operacja odrysowywania wiąże się z kosztem obliczeniowym (dużym dla poważnych wykresów). Dlatego czasami efektywnie jest wyłączyć tryb interaktywny, żeby zyskać na czasie. 10 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Linki • Matplotlib galeria http://matplotlib.sourceforge.net/gallery.html • Matplotlib w przykładach http://matplotlib.sourceforge.net/examples/index.html • Matplotlib dokumentacja (900+ stron!!!) http://matplotlib.sourceforge.net/contents.html http://matplotlib.sf.net/Matplotlib.pdf • Pylab – Py(thon+Mat)lab, czyli: scipy/numpy/matplotlib http://matplotlib.sourceforge.net 11 PYTHON-2013 Marcin Lewandowski [ [email protected] ] http://matplotlib.sourceforge.net/gallery.html 12 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Matplotlib i Latex • Przykłady matplotlib do Latexa: http://www.scipy.org/Cookbook/Matplotlib/LaTeX_Examples • Matplotlib zawiera wbudowany „silnik” do rysoawnia wyrażeń TeX – mathtext • mathtext składa wyrażenia matematyczne TeX przy pomocy FreeType 2 i domyślnych czcionek Computer Modern • Alternatywnie Matplotlib może używać pełnego LATEXa: • rcParams['text.usetex'] = True • Ten mod pracy wymaga instalacji: LaTeX, dvipng i Ghostscript • LATEX jest wtedy używany do rysowania wszystkich tekstów na rysunkach (nie tylko matematycznych) 13 PYTHON-2013 14 Marcin Lewandowski [ [email protected] ] matplotlib.pyplot vs. pylab Użyj matplotlib.pyplot import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 5, 0.1) y = np.sin(x) plt.plot(x, y) plt.show() Użyj pylab from pylab import * x = arange(0, 5, 0.1) y = sin(x) plot(x, y) show() PYTHON-2013 Marcin Lewandowski [ [email protected] ] Interaktywne okno wykresu matplotlib Skrót klawiaturowy Komenda h, r, home Home/Reset l, left arrow, backspace Wstecz v, right arrow Naprzód p Pan or Zoom o Zoom s Zapisz f Przełączanie trybu pełnoekranowy trzymany x / y Zoom w osi X lub Y trzymany ctrl Zachowywanie proporcji (aspect ratio) g Włączanie/wyłączanie siatki l Przełączanie skali osi Y – logarytmiczna/liniowa 15 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Kolory matplotlib Skrót klawiaturowy Komenda b blue c cyan g green k black m magenta r red w white y yellow #FF00FF String haksadecymalny (format HTML) (0.5, 1, 1) (1, 0, 1, 1) Format RGB lub RGBA '0.7' Jasność w skali szarości 16 PYTHON-2013 Line styles Marcin Lewandowski [ [email protected] ] 17 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Marker styles 18 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Inne możliwości • Umieszczanie (embedding) Matplotlib w: • GTK+ • Qt 4 • wxPython • Matplotlib na stony WEB (CGI, mod_python, Django, Pylons) • Basemap toolkit – rysowanie danych geograficznych http://matplotlib.sourceforge.net/basemap/d oc/html/index.html 19 PYTHON-2013 Marcin Lewandowski [ [email protected] ] IPYTHON 20 PYTHON-2013 Marcin Lewandowski [ [email protected] ] iPython – interaktywny shell Pythona • http://ipython.org/ • Interaktywny wygodny shell • Wbudowana grafika • Integracja z Pylab/Matplotlib • INSTALACJA • EDP – uaktualnienie wersji: easy_install -U ipython • Pełna instalacja: • http://conference.scipy.org/scipy2012/resources/fp_installs.php 21 PYTHON-2013 Marcin Lewandowski [ [email protected] ] 22 iPython – funkcje • <TAB> (tzw. ’Tab completion’) automatyczne uzupełnianie nazw zmiennych i obiektów, co znacznie skaraca czas pisania poleceń. Nie trzeba pamiętać nazw funkcji, można je sobie łatwo podejrzeć! • nazwa_obiektu? nazwa_obiektu?? Help dla danego obiektu – drukuje informacje na temat tego obiektu (funkcji, klasy etc.). ? – korzysta z docstrings, definicji funkcji (lista argumentów) ?? – pokazuje kod • ! komenda_systemowa wykonanie poleceń systemowych i przechwycenie ich rezultatów! • Historia komend/rezultatów specjalne zmienne _ , __ , _1, _2 trzymają historię rezultatów oraz _i1, _i2 historię komend • Debuggowanie kodu po błędzie/wyjątku PYTHON-2013 Marcin Lewandowski [ [email protected] ] 23 iPython – funkcje magiczne (%) • %quickref – wyświetla IPython Quick Reference Card • %magic – Display detailed documentation for all of the available magic commands • • • • • • • • • • • %paste, %cpaste – wkleja i wykonuje kod ze schowka (clipboard) %debug – uruchamia interaktywny debugger %hist – drukuje historię komend %pdb – Automatically enter debugger after any exception %reset – kasuje wszystkie zmienne i nazwy (czyści shell) %page obiekt – drukuje zawartość obiektu metodą „Pretty print” z podziałem na strony %run script.py – ładuje i wykonuje script w IPython %prun komenda – wykonuje komenda w profilerze (cProfile) %time / %timeit komenda – mierzy czas wykonania komendy (%timeit wykonuje 10 razy i mierzy średni czas wykonania) %who, %who_ls, %whos – wyświetla informację o zdefiniowanych zmiennych %xdel zmienna – kasuje zmienną PYTHON-2013 Marcin Lewandowski [ [email protected] ] 24 iPython – funkcje c.d. • !cmd – Execute cmd in the system shell • output = !cmd args – Run cmd and store the stdout in output • %alias alias_name cmd – Define an alias for a system (shell) • • • • • • • • command %bookmark – Utilize IPython’s directory bookmarking system %cd directory – Change system working directory to passed directory %pwd – Return the current system working directory %pushd directory – Place current directory on stack and change to target directory %popd – Change to directory popped off the top of the stack %dirs – Return a list containing the current directory stack %dhist – Print the history of visited directories %env – Return the system environment variables as a dict PYTHON-2013 Marcin Lewandowski [ [email protected] ] 25 iPython Notebook – linki • NOTEBOOKI: • https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython- Notebooks • https://github.com/ipython/ipython/tree/master/examples/notebooks • https://github.com/jrjohansson/scientific-python-lectures • https://bitbucket.org/hrojas/learn-pandas • WEBCAST: • http://ipython.org/videos.html PYTHON-2013 Marcin Lewandowski [ [email protected] ] 26 iPython Notebook – skróty klawiszowe • Shift-Enter – wykonuje aktywną celę, pokazuje rezultat (jeśli jest) i przechodzi do kolejnej celi. (sam klawisz Enter nie powoduje wykonania/ewaluacji!) • Ctrl-Enter – wykonanie aktywną celę „w miejscu”, tzn. nie przechodzi po wykonaniu do kolejnej. Wygodne do szybkiego eksperymentowania i nie powoduje tworzenia wielu cel z kodem • Ctrl-m – skrót klawiszowy – prefiks do innych poleceń Użyj Ctrl-m h żeby zobaczyć help z tymi poleceniami. PYTHON-2013 Marcin Lewandowski [ [email protected] ] iPython Notebook – skróty klawiszowe c.d. 27 PYTHON-2013 Marcin Lewandowski [ [email protected] ] iPython Notebook – uruchomienie $ ipython notebook • Standardowo nie ładuje pylab – tylko sam iPython $ ipython notebook --pylab • Tak uruchamiamy iPython z pylab – wykresy są pokazywane w zewnetrznym interaktywnym oknie (podobnie jak w pylab z konsoli Qt) $ ipython notebook --pylab inline • Uruchamienie iPython z pylab – wykresy inline 28 PYTHON-2013 HDF5 Marcin Lewandowski [ [email protected] ] 29 PYTHON-2013 Marcin Lewandowski [ [email protected] ] HDF5 • Hierarchical Data Format (HDF, HDF4, HDF5 ) – określa format oraz zestaw bibliotek do zachowywania i manipulowania BARDZO DUŻYMI zestawami danych numerycznych • Oryginalnie opracowany w National Center for Supercomputing Applications, obecnie rozwijany i wspierany przez organizację non-profit The HDF Group (http://www.hdfgroup.com) • OTWARTY!!! 30 PYTHON-2013 Marcin Lewandowski [ [email protected] ] HDF5 cechy • Uniwersalny i hierarchiczny model danych pozwala na • • • • • reprezentację złożonych struktur danych oraz metadanych (a’la system plikowy w pliku) W pełni przenośny pomiędzy różnymi platformami Obsługa plików > 2GB OFICJALNE biblioteki dla: C, C++, Fortran 90, Java INNE biblioteki: Matlab (7+), Perl, Python Dostępne narzędzia do zarządzania, przeglądania, analizy i manipulacji 31 PYTHON-2013 Marcin Lewandowski [ [email protected] ] HDF5 struktura • HDF5 jest hierarchiczny – struktury: Groups & Datasets • Dodatkowo Attributes mogą być przypisane do danego Dataset • HDF5 Groups zawierają: • Strukturę grupującą 0 lub więcej Groups lub Datasets • Dodatkowe metadane • HDF5 Datasets zawiera: • Nagłówek danych • Tablicę danych 32 PYTHON-2013 33 Marcin Lewandowski [ [email protected] ] Structures to organize objects “Groups” “/” (root) 3-D array “/foo” lat | lon | temp ----|-----|----12 | 23 | 3.1 15 | 24 | 4.2 17 | 21 | 3.6 palette Table Raster image Raster image “Datasets” 2-D array PYTHON-2013 Marcin Lewandowski [ [email protected] ] HDF5 Dataset • Klasy informacji w nagłówku Dataset: • Nazwa Datasetu – string ASCII • Typ danych: • Atomowe – np. integer, float • Złożone – struktury • Przestrzeń danych – określa liczbę wymiarów Datasetu (nielimitowana) • Układ Datasetu: • Ciągły (domyślny) • Blokowy – w równych „kawałkach” zapamiętywanych w różnych częściach pliku (w celu optymalizacji I/O) 34 PYTHON-2013 35 Marcin Lewandowski [ [email protected] ] HDF5 Dataset Metadata Data Dataspace Rank Dimensions 3 Datatype Dim_1 = 4 Dim_2 = 5 Dim_3 = 7 Integer (optional) Attributes Properties Time = 32.4 Chunked Pressure = 987 Compressed Temp = 56 Na podstawie:Introduction to HDF5 by Barbara Jones, The HDF Group, The 13th HDF & HDF-EOS Workshop, November 3-5, 2009 PYTHON-2013 HDF5 typy danych Marcin Lewandowski [ [email protected] ] 36 PYTHON-2013 Marcin Lewandowski [ [email protected] ] HDF5 Attributes • Attributes – „małe” nazwane Datasety związane z głównymi Datasets, Groups lub nazwanymi typami danych • Używane do opisu danych (metadane) • Attribute składają się z: • Nazwy • Wartości • Attributes są pamiętane w nagłówkach obiektów, których dotyczą 37 PYTHON-2013 Marcin Lewandowski [ [email protected] ] HDFView – przeglądarka HDF5 38 PYTHON-2013 Marcin Lewandowski [ [email protected] ] HDF5 i Matlab • Domyślny format plików MAT od wersji 7.3+ • Funkcje wysokiego poziomu – zapis/odczyt plików MAT (workspace) • Funkcje niskiego poziomu (300 funkcji) – bezpośredni dostęp do biblioteki C API Patrz: MATLAB 7 Programming Fundamentals 39 PYTHON-2013 Marcin Lewandowski [ [email protected] ] HDF5-Matlab funkcje wysokiego poziomu • hdf5info • hdf5read • hdf5write 40 PYTHON-2013 Marcin Lewandowski [ [email protected] ] hdf5info fileinfo = hdf5info(filename) fileinfo = hdf5info(...,'ReadAttributes',BOOL) [...] = hdf5info(..., 'V71Dimensions', BOOL) • Przykład: fileinfo = hdf5info('example.h5') fileinfo = Filename: 'example.h5' LibVersion: '1.8.3' Offset: 0 FileSize: 8172 GroupHierarchy: [1x1 struct] 41 PYTHON-2013 Marcin Lewandowski [ [email protected] ] 42 hdf5read data = hdf5read(filename,datasetname) attr = hdf5read(filename,attributename) [data, attr] = hdf5read(...,'ReadAttributes',BOOL) data = hdf5read(hinfo) [...] = hdf5read(..., 'V71Dimensions', BOOL) PYTHON-2013 Marcin Lewandowski [ [email protected] ] HDF5 i Python • h5py (http://h5py.googlecode.com) • NumPy (http://new.scipy.org) • Test: >>> import h5py.tests >>> h5py.tests.runtests() 43 PYTHON-2013 44 Marcin Lewandowski [ [email protected] ] EX: hdf5 Konwersja pliku tekstowego do HDF5 • Skrypt T2Hconverter.py służy do konwersji pliku tekstowego (TXT), z danymi przykładowymi, do formatu HDF5 • Jako wynik otrzymujemy plik HDF5 (H5) o nazwie identycznej z nazwą pliku danych T2Hconverter [nazwa pliku danych] PYTHON-2013 Marcin Lewandowski [ [email protected] ] Tekstowe dane wejściowe ------- listing pliku dane.txt ----------------------------------------------; Przykładowy plik z danymi pomiarowymi. ; Średnik na początku linii oznacza komentarz ; Format danych: ; Czas [s] (float), Temperatura [st. C] (float) 0,25.6 5,27.3 10,29.1 15,30.7 20,31.2 25,34.5 30,42.2 35,37.5 40,32.0 45,27.6 50,25.3 55,25.1 60,25.0 -------- koniec listingu ------------------------------------------------------ 45 PYTHON-2013 Marcin Lewandowski [ [email protected] ] 46 Struktura pliku wynikowego HDF5 /ROOT | |----Header | | | |- ConversionDate (string) data i czas konwersji | | | |- Description (string) opis pliku | | | |- ScriptVersion (int) wersja skryptu zapisu (pomnożona x10) | |----Data | | | |- Values (float) macierz danych ( rząd 1 - czas, rząd 2 - temp ) PYTHON-2013 Marcin Lewandowski [ [email protected] ] Skrypty dla Matlaba • Skrypt "h5reader_example.m" odczytuje dane z pliku wejściowego w formacie HDF5 i wyświetla zawartość w oknie roboczym. • Nazwa pliku wejściowego znajduję się w zmiennej FILE_NAME deklarowanej na początku skryptu 47 PYTHON-2013 Marcin Lewandowski [ [email protected] ] H5PY KROK-PO-KROKU Na podstawie: http://h5py.alfven.org/docs/guide/quick.html 48 PYTHON-2013 Marcin Lewandowski [ [email protected] ] 49 Pliki HDF5 • Konstruktor plików HDF5 akceptuje tryby analogicznie jak zwykła funkcja open(): • “r”, “w”, “a” (domyślny) # tworzy lub nadpisuje plik >>> f = h5py.File('file1.hdf5', 'w') # otwiera istniejący tylko do odczytu >>> f = h5py.File('file2.hdf5', 'r') PYTHON-2013 Marcin Lewandowski [ [email protected] ] 50 HDF5 Dataset • Utworzenie HDF5 z datasetem (100,100) typu integer • Inicjalizacja datasetu wartością 42 >>> import h5py # utworzenie HDF5 >>> f = h5py.File('myfile.hdf5') >>> dset=f.create_dataset("MyDataset", (100, 100), 'i') >>> dset[...] = 42 PYTHON-2013 Marcin Lewandowski [ [email protected] ] HDF5 Dataset c.d. • Własności dataset (utworzonego wcześniej) : >>> dset.shape (100, 100) >>> dset.dtype dtype('int32') • Dataset można utworzyć z array wbudowanego w NumPy: >>> import numpy >>> arr = numpy.ones((2,3), '=i4') >>> dset = f.create_dataset('AnotherDataset', data=arr) 51 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Grupy • Utworzony Dataset ma nazwę, która tworzy element ścieżki dostępu do niego: >>> dset.name '/MyDataset' • Do złudzenia przypomina to system ścieżek w systemach plikowych. W powyższym przykładzie mówimy, że MyDataset znajduje się w Grupie root (/) pliku HDF5. • Można tworzyć inne grupy i podgrupy: >>> subgroup = f.create_group("SubGroup") >>> subgroup.name '/SubGroup' • Każda z nich może z kolei zawierać Datasety i/lub kolejne Grupy: >>> dset2 = subgroup.create_dataset('MyOtherDataset', (4,5), '=f8') >>> dset2.name '/SubGroup/MyOtherDataset' 52 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Grupy c.d. • Dostęp do grup za pomocą ścieżki (z podgrupy lub ścieżka bezwzględna dla pliku): >>> dset2 = subgroup['MyOtherDataset'] >>> dset2 = f['/SubGroup/MyOtherDataset'] # equivalent • Grupy oraz obiekt plikowy HDF5 (”f” w tym przykładzie) wspierają inne operacje słownikowe: >>> list(f) ['MyDataset', 'SubGroup'] >>> 'MyDataset' in f True >>> 'Subgroup/MyOtherDataset' in f True >>> del f['MyDataset'] • As a safety feature, you can’t create an object with a pre-existing name; you have to manually delete the existing object first: >>> grp = f.create_group("NewGroup") >>> grp = f.create_group("NewGroup") ValueError: Name already exists (Symbol table: Object already exists) >>> del f['NewGroup'] >>> grp = f.create_group("NewGroup") 53 PYTHON-2013 Marcin Lewandowski [ [email protected] ] 54 Atrybuty • HDF5 pozwala na dodawanie dodatkowych „małych” danych do Grup i Datasetów, są to Atrybuty. • Atrybuty mają funkcję metadanych – czyli danych o danych, które mogą dodatkowo opisywać dane np. tytuł, timestamp, etc. • Obiekt typu słownikowego (Dict) o nazwie attr jest związany z każdą Grupą/Datasetem i służy do dostępu do Atrybutów: >>> dset.attrs <Attributes of HDF5 object "MyDataset" (0)> >>> dset.attrs["Name"] = "My Dataset" >>> dset.attrs[„My Index"] = 4 >>> dset.attrs["Order Array"] = numpy.arange(10) >>> for name, value in dset.attrs.iteritems(): ... print name+":", value ... Name: My Dataset My Index: 4 Order Array: [0 1 2 3 4 5 6 7 8 9] PYTHON-2013 Marcin Lewandowski [ [email protected] ] 55 Dataset – funkcje specjalne • Datasety HDF5 wspierają specjalne funkcje za pomocą opcji • • • • przekazanych do Group.create_dataset(): Chunked storage – struktura danych typu bloki indeksowane w B-drzewo lub w sposób ciągły. Tego typu układ może drastycznie przyśpieszać operacje I/O dla pewnych wzorów dostępu do danych (np. co n-ty). Compression – przezroczysta bezstratna kompresja danych; dostępne są typy kompresji “gzip”, “lzf”, “szip”. Error-Detection – wszystkie pliki HDF5 zawierają sumę kontrolną (algorytm fletcher32), która umożliwia weryfikację zapisz/odczyt dla Datasetu. Błąd sumy kontrolne przy odczycie powoduje wyjątek! Resizing – rozmiary Datasety HDF5 mogą być zmieniane „w locie” (do maksymalnego rozmiaru określonego w momencie tworzenia). PYTHON-2013 Marcin Lewandowski [ [email protected] ] Dynamiczny resizing • Funkcja Dataset.resize() modyfikuje rozmiar datasetu (w miejscu): >>> dset = grp.create_dataset("name", (10,10), '=f8', maxshape=(None, None)) >>> dset.shape (10, 10) >>> dset.resize((20,20)) >>> dset.shape (20, 20) 56 PYTHON-2013 Marcin Lewandowski [ [email protected] ] 57 Dostęp i „krojenie” Datasetu • Dosęp do Dataset za pomocą tradycyjnego ‚slicingu’ oraz rozszerzonego a’la NumPy. • Przecięcia (slices) są tłumaczone na odpowiednik HDF5 zwany hyperslab, który zapewnia szybki i efektywny dostęp do danych. • Rozpoznawane argumenty ‚slicingu’: • Liczby: wszystko co jest konwertowalne do Python long • Obiekty Slice – UWAGA: ujemne indeksy niedozwolone! • Nazwy pól – dla danych złożonych (compound) • Obiekt Ellipsis (...) – maksymalnie jeden! PYTHON-2013 Marcin Lewandowski [ [email protected] ] Dostęp i „krojenie” Datasetu – przykłady >>> dset = f.create_dataset("MyDataset", (10,10,10), 'f') >>> dset[0,0,0] >>> dset[0,2:10,1:9:3] >>> dset[:,::2,5] >>> dset[0] >>> dset[1,5] >>> dset[0,...] >>> dset[...,6] • Dla danych złożonych można specyfikować wiele pól na raz: >>> dset["FieldA"] >>> dset[0,:,4:5, "FieldA", "FieldB"] >>> dset[0, ..., "FieldC"] 58 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Broadcasting (rozgłaszanie) • Dla prostego ‚slicingu’ wspierane jest rozgłaszanie wartości: >>> dset[0,:,:] = np.arange(10) # wypełnij (10,10) • h5py NIE używa NumPy do realizacji rozgłaszania. Rozgłaszanie jest zaimplementowane za pomocą wielokrotnych selekcji z użyciem HDF5 hyperslab. • W tym przykładzie Dataset (1000, 1000) jest rozgłaszany do Datasetu (1000, 1000, 1000) : >>> dset2 = f.create_dataset("MyDataset", (1000,1000,1000), 'f') >>> data = numpy.arange(1000*1000, dtype='f').reshape((1000,1000)) >>> dset2[:] = data # To nie wymaga alokacji 3.8GB! • Broadcasting jest wspierany tylko dla prostego “slicningu”. 59 PYTHON-2013 Marcin Lewandowski [ [email protected] ] Zgodność z NumPy • Datasety implementują następujące funkcje interfejsu obsługi tablic w NumPy (tzw. NumPy-array): • Slicing – proste i elementy zaawansowanego indeksowania • shape – atrybut • dtype – atrybut UWAGA: do tego tematu wrócimy omawiając NumPy 60