JĘZYK PYTHON NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Dr Marcin Lewandowski [ mlew@ippt.pan.pl ] Strona kursu: http://us4us.eu/wydarzenia/kursy/



Podobne dokumenty
JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Michał & Mateusz w zastępstwie za Marcin Lewandowski [ ]

Wprowadzenie do Python

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

Edytor tekstu MS Office Word

Diary przydatne polecenie. Korzystanie z funkcji wbudowanych i systemu pomocy on-line. Najczęstsze typy plików. diary nazwa_pliku

Smarty PHP. Leksykon kieszonkowy

Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej.

Instrukcja korzystania ze skryptu kroswalidacja.py

Programowanie obiektowe

2. Podstawowe aplikacje i komendy

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Wprowadzenie do środowiska MATLAB z zastosowaniami w modelowaniu i analizie danych

Odczytywanie i zapisywanie obrazów rastrowych do plików, operacje punktowe na tablicach obrazów

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Zanim zaczniemy GNU Octave

JAVA W SUPER EXPRESOWEJ PIGUŁCE

ROZSZERZANIE MOŻLIWOŚCI...

2 INSTALACJA OPROGRAMOWANIA. 3 3 GŁÓWNE OKNO PROGRAMU 3 4 MODUŁ OBSŁUGI ARCHIWUM 7

Pisząc okienkowy program w Matlabie wykorzystujemy gotowe obiekty graficzne, lub możemy tworzyć własne obiekty dziedzicząc już zdefiniowane.

Wykresy i interfejsy użytkownika

MentorGraphics ModelSim

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Podstawy analizy danych numerycznych w języku Python

Język Python (2) Język Python (2) 1/36

BIBLIOTEKA NUMPY, CZĘŚĆ 1

Wymagania edukacyjne z informatyki w klasie VIII

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Programowanie w języku Python. Grażyna Koba

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

Wstęp do informatyki. Python 1

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Część I Rozpoczęcie pracy z usługami Reporting Services

Microsoft Visual C : praktyczne przykłady / Mariusz Owczarek. Gliwice, cop Spis treści

Scilab - podstawy. Wersje instalacyjne programu Scilab mogą zostać pobrane ze strony

Programowanie w Javie

SKRYPTY. Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Aplikacje w środowisku VBA. Visual Basic for Aplications

Wartości x-ów : Wartości x ów można w Scilabie zdefiniować na kilka sposobów, wpisując odpowiednie polecenie na konsoli.

Programowanie obiektowe zastosowanie języka Java SE

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

Podstawy i języki programowania

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Komputerowe wspomaganie eksperymentu 5

Python wstęp do programowania dla użytkowników WCSS

Podstawowe kontrolki graficzne. Obsługa plików poprzez kontrolki

Webowy generator wykresów wykorzystujący program gnuplot

Oto istotne informacje o skrótach klawiszowych ZoomText:

SPIS TREŚCI: KARTY GRAFICZNE... 15

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Advance CAD 2016 SP2. W tym dokumencie opisano ulepszenia w Advance CAD Service Pack 2. Co nowego w Advance CAD 2016 SP2

Pracownia internetowa w szkole ZASTOSOWANIA

Instalacja

INFORMATYKA KLASA VII Wymagania na poszczególne oceny

Program szkoleniowy. 24 h dydaktycznych (18 h zegarowych) NAZWA SZCZEGÓŁY CZAS

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Wprowadzenie do projektu QualitySpy

Pierwsze kroki z easy Soft CoDeSys Eaton Corporation. All rights reserved.

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Zakład Systemów Rozproszonych

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

KLASA 7 szk.podst. Stopień dostateczny Uczeń: wymienia cztery dziedziny,

Wybrane zagadnienia w pracy z danymi rastrowymi w ArcGIS Marcin Paź Esri Polska

Writer wzory matematyczne

Kurs języka Python. Wykład 14. Marcin Młotkowski. 25 stycznia Python i Apache Pythonowe platformy aplikacyjne. Dystrybucja aplikacji w U*IX

Karty pracy. Ustawienia. W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne.

Krótka instrukcja opracowania danych w programie SciDAVis v. 1-D013-win

Python wstęp. Michał Bereta

1.Wstęp. 2.Generowanie systemu w EDK

Podręcznik użytkownika Obieg dokumentów

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Plan. Raport. Tworzenie raportu z kreatora (1/3)

Wykład A1. AutoCAD. Jarosław Bydłosz Katedra Geomatyki

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

Laboratorium - Zarządzanie systemem plików poprzez wbudowane oprogramowanie w systemie Windows XP

Skróty klawiaturowe w systemie Windows 10

trainxx tramxx

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Część 4 życie programu

Smart Draw - prezentacja programu

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

Skróty klawiaturowe w PowerPoint

Wprowadzenie do psql i SQL. Język komend psql. Podstawy instrukcji SELECT

Instrukcja dotycząca konwersji dokumentów LaTeX do plików w formacie RTF

Tabela wewnętrzna - definicja

Funkcje i instrukcje języka JavaScript

Pakiety matematyczne. Matematyka Stosowana. dr inż. Krzysztof Burnecki

Programowanie Obiektowe i C++

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7

Transkrypt:

JĘZYK PYTHON NARZĘDZIE DLA KAŻDEGO NAUKOWCA Dr Marcin Lewandowski [ mlew@ippt.pan.pl ] Strona kursu: http://us4us.eu/wydarzenia/kursy/ 1

2 SCIPY, NUMPY, MATPLOTLIB

3 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

4 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

5 SciPy linki Strona domowa: http://www.scipy.org Dokumentacja: http://docs.scipy.org/doc/scipy/reference Cookbook: http://www.scipy.org/cookbook

6 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

7 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

8 MATPLOTLIB W PRZYKŁADACH

9 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

10 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.

11 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

12 http://matplotlib.sourceforge.net/gallery.html

13 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)

14 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()

15 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

16 Kolory matplotlib Skrót klawiaturowy b c g k m r w y #FF00FF (0.5, 1, 1) (1, 0, 1, 1) '0.7' Komenda blue cyan green black magenta red white yellow String haksadecymalny (format HTML) Format RGB lub RGBA Jasność w skali szarości

17 Line styles

18 Marker styles

19 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

20 IPYTHON

21 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

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

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ą

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

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

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.

27 ipython Notebook skróty klawiszowe c.d.

28 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

29 HDF5

30 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!!!

31 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

32 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

33 Structures to organize objects Groups / (root) 3-D array /foo palette lat lon temp ---- ----- ----- 12 23 3.1 15 24 4.2 17 21 3.6 Table Raster image Datasets Raster image 2-D array

34 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)

35 HDF5 Dataset Rank 3 Metadata Dataspace Dimensions Dim_1 = 4 Dim_2 = 5 Dim_3 = 7 Data Datatype Integer Properties Chunked Compressed (optional) Attributes Time = 32.4 Pressure = 987 Temp = 56 Na podstawie:introduction to HDF5 by Barbara Jones, The HDF Group, The 13th HDF & HDF-EOS Workshop, November 3-5, 2009

36 HDF5 typy danych

37 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ą

38 HDFView przeglądarka HDF5

39 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

40 HDF5-Matlab funkcje wysokiego poziomu hdf5info hdf5read hdf5write

41 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]

42 hdf5read data = hdf5read(filename,datasetname) attr = hdf5read(filename,attributename) [data, attr] = hdf5read(...,'readattributes',bool) data = hdf5read(hinfo) [...] = hdf5read(..., 'V71Dimensions', BOOL)

43 HDF5 i Python h5py (http://h5py.googlecode.com) NumPy (http://new.scipy.org) Test: >>> import h5py.tests >>> h5py.tests.runtests()

Konwersja pliku tekstowego do HDF5 44 EX: 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]

45 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 ------------------------------------------------------

46 Struktura pliku wynikowego HDF5 /ROOT ----Header - ConversionDate czas konwersji (string) data i - 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 )

47 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

48 H5PY KROK-PO-KROKU Na podstawie: http://h5py.alfven.org/docs/guide/quick.html

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')

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

51 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)

52 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'

53 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")

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]

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).

56 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)

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!

58 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"]

59 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.

60 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