Ukázky použití knihovny NumPy.
╔════════════╤═══════════════════════════╤═══════════════════════════════╗
║ Formát │ Popis │ Rozsah ║
╟────────────┼───────────────────────────┼───────────────────────────────╢
║ bool │ uloženo po bajtech │ True/False ║
╟────────────┼───────────────────────────┼───────────────────────────────╢
║ int8 │ celočíselný se znaménkem │ -128..127 ║
║ int16 │ celočíselný se znaménkem │ -32768..32767 ║
║ int32 │ celočíselný se znaménkem │ -2147483648..2147483647 ║
║ int64 │ celočíselný se znaménkem │ -9223372036854775808.. ║
║ │ │ 9223372036854775807 ║
╟────────────┼───────────────────────────┼───────────────────────────────╢
║ uint8 │ celočíselný bez znaménka │ 0..255 ║
║ uint16 │ celočíselný bez znaménka │ 0..65535 ║
║ uint32 │ celočíselný bez znaménka │ 0..4294967295 ║
║ uint64 │ celočíselný bez znaménka │ 0..18446744073709551615 ║
╟────────────┼───────────────────────────┼───────────────────────────────╢
║ float16 │ plovoucí řádová čárka │ poloviční přesnost (half) ║
║ float32 │ plovoucí řádová čárka │ jednoduchá přesnost (single) ║
║ float64 │ plovoucí řádová čárka │ dvojitá přesnost (double) ║
╟────────────┼───────────────────────────┼───────────────────────────────╢
║ complex64 │ komplexní číslo (dvojice) │ 2×float32 ║
║ complex128 │ komplexní číslo (dvojice) │ 2×float64 ║
╚════════════╧═══════════════════════════╧═══════════════════════════════╝
╔════════════╤══════╗
║ Formát │ Kód ║
╟────────────┼──────╢
║ formát │ kód ║
║ bool │ '?' ║
║ int8 │ 'b' ║
║ int16 │ 'h' ║
║ int32 │ 'i' ║
║ int64 │ 'l' ║
║ uint8 │ 'B' ║
║ uint16 │ 'H' ║
║ uint32 │ 'I' ║
║ uint64 │ 'L' ║
║ float16 │ 'e' ║
║ float32 │ 'f' ║
║ float64 │ 'd' ║
║ complex64 │ 'F' ║
║ complex128 │ 'D' ║
╚════════════╧══════╝
Celkový počet bitů (bytů): 32 (4)
Bitů pro znaménko: 1
Bitů pro exponent: 8
Bitů pro mantisu: 23
Celkový počet bitů (bytů): 64 (8)
Bitů pro znaménko: 1
Bitů pro exponent: 11
Bitů pro mantisu: 52
Celkový počet bitů (bytů): 16 (2)
Bitů pro znaménko: 1
Bitů pro exponent: 5
Bitů pro mantisu: 10
BIAS (offset exponentu): 15
Přesnost: 5-6 číslic
Maximální hodnota: 65504
Minimální hodnota: -65504
Nejmenší kladná nenulová hodnota: 5,960×10⁻⁸
Nejmenší kladná normalizovaná hodnota: 6,104×10⁻⁵
(10,) - vektor s deseti prvky(2, 3) - dvourozměrná matice se dvěma řádky a třemi sloupci(2, 3, 4) - trojrozměrné polenumpy.shape()numpy.reshape()numpy.array()numpy.zeros()numpy.ones()numpy.full()numpy.eye()numpy.arange()numpy.linspace()numpy.geomspace()numpy.logspace()numpy.matrix()array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)╔═════════╤════════════════════════════════════╗
║ Hodnota │ Význam ║
╟─────────┼────────────────────────────────────╢
║ 'C' │ prvky jsou interně uspořádány jako ║
║ │ v programovacím jazyku C ║
║ │ ║
║ 'F' │ prvky jsou interně uspořádány jako ║
║ │ v programovacím jazyku Fortran ║
║ │ ║
║ 'A' │ ponecháme na implementaci, který ║
║ │ způsob uspořádání interně zvolit ║
╚═════════╧════════════════════════════════════╝
| 1 2 3 |
| 4 5 6 |
| 7 8 9 |
Nejprve je nutné naimportovat všechny potřebné funkce a konstanty z balíčku numpy
Používají se následující varianty importu
import numpy
import numpy as np
from numpy import *
from numpy import array, linspace
Pro potřeby prezentace naimportujeme všechny funkce a konstanty přímo do našeho jmenného prostoru
from numpy import *Základní kontrola, jestli se import podařil
import sys
if "numpy" not in sys.modules:
raise Exception("Modul numpy nebyl naimportován")Postupně si popíšeme následující typy konstruktorů polí typu ndarray
numpy.array()numpy.zeros()numpy.ones()numpy.full()numpy.eye()numpy.arange()numpy.linspace()numpy.geomspace()numpy.logspace()numpy.array()array volatelnáif "array" not in globals():
raise Exception("Symbol array neexistuje")
if not callable(array):
raise Exception("Nelze volat funkci array")a = array([1, 2, 3, 4])tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)rangekonstrukce pole
a = array(range(10))tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = array(range(10), dtype=float)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = array(range(10), order='C')tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = array(range(10), order='F')tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)a = array([[1, 2, 3], [4, 5, 6]])tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)numpy.zeroszeros(shape, dtype=float, order='C')
numpy.zeros()zeros volatelnáif "zeros" not in globals():
raise Exception("Symbol zeros neexistuje")
if not callable(zeros):
raise Exception("Nelze volat funkci zeros")konstrukce pole
a = zeros(1)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = zeros(10)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = zeros((5, 5))tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = zeros((5, 5), dtype=int)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = zeros((2, 2), dtype=complex)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)numpy.onesones(shape, dtype=None, order='C')
numpy.ones()ones volatelnáif "ones" not in globals():
raise Exception("Symbol ones neexistuje")
if not callable(zeros):
raise Exception("Nelze volat funkci ones")konstrukce pole
a = ones(10)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = ones((3, 4))tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = ones((3, 4), dtype=int)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)intkonstrukce pole
a = ones((3, 4, 5), dtype=int)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)intkonstrukce pole
a = ones((5, 4, 3), dtype=int)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)zde může být použití typu komplexní číslo možná poněkud překvapující ovšem stále platí, že 1=1+0j
konstrukce pole
a = ones((3, 2), dtype=complex)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)numpy.eye()eye volatelnáif "eye" not in globals():
raise Exception("Symbol eye neexistuje")
if not callable(eye):
raise Exception("Nelze volat funkci eye")konstrukce pole
a = eye(1)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = eye(5)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = eye(2, 10)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)numpy.arange()arange volatelnáif "arange" not in globals():
raise Exception("Symbol arange neexistuje")
if not callable(arange):
raise Exception("Nelze volat funkci arange")při použití jednoho parametru má tento parametr význam hodnoty „stop“ vytvoří se vektor s prvky od 0 do „stop“ (kromě)
konstrukce pole
a = arange(10)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = arange(10, 20)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = arange(10, 20, 2)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = arange(20, 10, -2)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)Nemusíme zůstat pouze u celých čísel, protože pracovat je možné i s hodnotami
typu float a complex
konstrukce pole
a = arange(0, 5, 0.1)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = arange(0+0j, 10+10j, 2+0j)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)numpy.linspace()linspace volatelnáif "linspace" not in globals():
raise Exception("Symbol linspace neexistuje")
if not callable(linspace):
raise Exception("Nelze volat funkci linspace")pokud se nespecifikuje počet prvků, bude se předpokládat, že výsledný vektor má mít padesát prvků
konstrukce pole
a = linspace(0, 1)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)zde explicitně specifikujeme, že výsledný vektor má mít deset prvků (tím, že se začíná od nuly, získáme krok 0.11111111…)
konstrukce pole
a = linspace(0, 1, 10)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)zde explicitně specifikujeme, že výsledný vektor má mít jedenáct prvků
konstrukce pole
a = linspace(0, 1, 11)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = linspace(1, 0, 11)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = linspace(0+0j, 1+0j, 10)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = linspace(0+0j, 0+1j, 10)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = linspace(0+0j, 1+1j, 10)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)numpy.geomspace()geomspace volatelnáif "geomspace" not in globals():
raise Exception("Symbol geomspace neexistuje")
if not callable(geomspace):
raise Exception("Nelze volat funkci geomspace")pokud se nespecifikuje počet prvků, bude se předpokládat, že výsledný vektor má mít padesát prvků
konstrukce pole
a = geomspace(1, 100)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = geomspace(1, 1000, 10)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = geomspace(1, 100000, 6)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)linspace a geomspacenumpy.logspace()logspace volatelnáif "logspace" not in globals():
raise Exception("Symbol logspace neexistuje")
if not callable(geomspace):
raise Exception("Nelze volat funkci logspace")pokud se nespecifikuje počet prvků, bude se předpokládat, že výsledný vektor má mít padesát prvků
konstrukce pole
a = logspace(1, 100)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = logspace(1, 10, 10)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)numpy.float32()numpy.int32()numpy.complex128()astypeint64konstrukce běžného seznamu
lst = [1, 2, 3, 4]přetypování (konstrukce pole daného typu)
a = int64(lst)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)float16konstrukce běžného seznamu
lst = [1, 2, 3, 4]přetypování (konstrukce pole daného typu)
a = float16(lst)tisk typu a obsahu vytvořeného pole
print(type(a))
print(a)konstrukce pole
a = linspace(0, 1, 10)přetypování na vektor celých čísel (povšimněte si výsledků)
b = int32(linspace(0, 1, 10))tisk typu a obsahu vytvořeného pole
print(type(b))
print(b)konstrukce pole
a = arange(0, 10)konverze
b = a.astype(complex64)tisk typu a obsahu původního pole
print(type(a))
print(a.dtype)
print(a)tisk typu a obsahu zkonvertovaného pole
print(type(b))
print(b.dtype)
print(b)jednorozměrný vektor
a = array([1, 2, 3])počet dimenzí vektoru
print(a.ndim)tvar vektoru
print(a.shape)typ prvků
print(a.dtype.name)velikost prvků v bajtech
print(a.itemsize)velikost pole (počet prvků)
print(a.size)dvourozměrné pole
a = eye(5)počet dimenzí vektoru
print(a.ndim)tvar vektoru
print(a.shape)typ prvků
print(a.dtype.name)velikost prvků v bajtech
print(a.itemsize)velikost pole (počet prvků)
print(a.size)trojrozměrné pole
a = ones((3, 4, 5), dtype=int)počet dimenzí vektoru
print(a.ndim)tvar vektoru
print(a.shape)typ prvků
print(a.dtype.name)velikost prvků v bajtech
print(a.itemsize)velikost pole (počet prvků)
print(a.size)konstrukce velkého pole
a = arange(10000).reshape(100, 100)tisk velkého pole
print(a)výsledek by měl vypadat následovně:
[[ 0 1 2 ... 97 98 99]
[ 100 101 102 ... 197 198 199]
[ 200 201 202 ... 297 298 299]
...
[9700 9701 9702 ... 9797 9798 9799]
[9800 9801 9802 ... 9897 9898 9899]
[9900 9901 9902 ... 9997 9998 9999]]
numpy.reshape()běžná matice se dvěma řádky a třemi sloupci
a = array([[1, 2, 3], [4, 5, 6]])změna tvaru matice na 3x2 prvky
b = reshape(a, (3, 2))tisk původní matice
print(a)tisk nové matice
print(b)běžná matice se dvěma řádky a třemi sloupci
a = array([[1, 2, 3], [4, 5, 6]])změna tvaru matice na 3x2 prvky
b = reshape(a, (2, 3))tisk původní matice
print(a)tisk nové matice
print(b)běžná matice se dvěma řádky a třemi sloupci
a = array([[1, 2, 3], [4, 5, 6]])změna tvaru matice na jediný řádek
b = reshape(a, (1, 6))tisk původní matice
print(a)tisk nové matice
print(b)běžná matice se dvěma řádky a třemi sloupci
a = array([[1, 2, 3], [4, 5, 6]])změna tvaru matice na jediný sloupec
b = reshape(a, (6, 1))tisk původní matice
print(a)tisk nové matice
print(b)numpy.array()numpy.reshape()vyzkoušíme význam nepovinného parametru order
původní matice
a = reshape(arange(0, 24), (6, 4))tisk původní matice
print(a)původní matice s uspořádáním dle jazyka C
c = reshape(arange(0, 24), (6, 4), order="C")tisk původní matice
print(c)původní matice s uspořádáním dle Fortranu
f = reshape(arange(0, 24), (6, 4), order="F")tisk původní matice
print(f)jednorozměrná pole - vektory
a = arange(12)tisk původního pole
print(a)indexování prvků od nuly
print(a[0])indexování prvků od nuly
print(a[5])indexovat lze i od konce pole
print(a[-1])indexovat lze i od konce pole
print(a[-5])dvourozměrná pole - matice
a = reshape(arange(12), (3, 4))tisk původního pole
print(a)přístup k prvkům: řádek/sloupec
print(a[0][2])přístup k prvkům: řádek/sloupec
print(a[2][0])a = arange(12)tisk původního pole
print(a)pole indexů
b = array([1, 2, 9, 8, 5])výběr celým polem
print(a[b])a = arange(12)tisk původního pole
print(a)pole indexů
b = array([-1, -2, -9, -8, -5])výběr celým polem
print(a[b])dvourozměrné pole - matice
a = reshape(arange(12), (3, 4))tisk původního pole
print(a)první řádek pole
b = a[0]
print(b)druhý řádek pole
b = a[1]
print(b)poslední řádek pole
b = a[-1]
print(b)a = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])pro nové pole s prohozenými řádky
b = array([0, 2, 1])tisk pole
print(a[b])původní pole
a = arange(12)tisk původního pole
print(a)slicing
b = a[3:7]tisk nového pole
print(b)původní pole
a = arange(12)tisk původního pole
print(a)slicing
b = a[:7]tisk nového pole
print(b)slicing
c = a[5:]tisk nového pole
print(c)slicing
d = a[:]tisk nového pole
print(d)konstrukce pole
a = arange(12)provedení řezu polem
print(a[-4:-6])konstrukce pole
a = arange(12)provedení prvního řezu polem
print(a[-6:-4])provedení druhého řezu polem
print(a[-6:])provedení třetího řezu polem
print(a[:-4])konstrukce pole
a = reshape(arange(25), (5, 5))řez dvojrozměrným polem
print(a[2:4, 3])další řez dvojrozměrným polem
print(a[2:4, 3:5])třetí řez dvojrozměrným polem
print(a[1:4, 1:4])čtvrtý řez dvojrozměrným polem
print(a[-4:-2, -4:-2])konstrukce pole
a = arange(1, 11)první řez polem: krok=1
print(a[1:10:1])druhý řez polem: krok=2
print(a[1:10:2])třetí řez polem: krok=3
print(a[1:10:3])čtvrtý řez polem - pouze uvedení kroku
a[::3]konstrukce pole
a = reshape(arange(0, 25), (5, 5))tisk původního pole
print(a)řez s uvedením kroku
print(a[0:5:2])
print(a[1::2])konstrukce pole
a = reshape(arange(0, 25), (5, 5))tisk původního pole
print(a)řez s uvedením kroku
print(a[::2, ::2])konstrukce pole
a = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])provedení operace
b = a + 100tisk původního pole
print(a)tisk nového pole
print(b)konstrukce pole
a = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])provedení operace
b = a * 2tisk původního pole
print(a)tisk nového pole
print(b)konstrukce pole
a = reshape(arange(25), (5, 5))provedení operace
b = a % 2tisk původního pole
print(a)tisk nového pole
print(b)první pole
a1 = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])druhé pole
a2 = eye(3)součet prvek po prvku
c = a1 + a2tisk nového pole
print(c)první pole
a1 = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])druhé pole
a2 = eye(3)operace
c = a1 * 10 + a2 * 20tisk nového pole
print(c)původní matice
a1 = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])tisk matice
print(a1)provedení operace
a1 += 100tisk výsledku operace
print(a1)původní matice
a1 = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])původní matice
a2 = eye(3)c = a1 * a2tisk výsledku operace
print(c)původní matice
a1 = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])původní matice
a2 = eye(3)maticový součin
c = a1 @ a2tisk výsledku operace
print(c)původní matice
a1 = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])původní matice
a2 = eye(3)a2[1][1] = -1tisk výsledku operace
print(a1@a2)maticový součin
c = a1 @ a2tisk výsledku operace
print(c)import numpy.linalg # noqa: E402matice 3x3 prvky
m = array([[0, 1, 0], [1, 1, 1], [0, 1, 1]])výpočet determinantu
det = linalg.det(m)tisk výsledku operace
print(det)původní matice
a = array([[0, 1, 0], [1, 1, 1], [0, 1, 1]])výpočet inverzní matice
inv = linalg.inv(m)tisk výsledku
print(inv)a = array([[0, 1, 0], [1, 1, 1], [0, 1, 1]])výpočet inverzní matice
inverse = linalg.inv(a)zpětný výpočet
c = dot(a, inverse)
print(c)původní pole
a = arange(12)tisk výsledku operace
print(a == 5)tisk výsledku operace
print(a < 6)původní pole
a = arange(1, 11)původní pole
b = array([100, 0, 100, 0, 100, 0, 100, 0, 100, 0])tisk výsledku operace
print(a == b)tisk výsledku operace
print(a != b)tisk výsledku operace
print(a < b)původní vektor
a = arange(24)konstrukce matice
b = reshape(a, (6, 4), order='F')tisk výsledku operace
print(b < 10)tisk výsledku operace
print(b % 2 == 1)původní pole
a = arange(12)tisk výsledku operace
print(a < 6)filtrace (selekce)
print(a[a < 6])filtrace (selekce)
print(a[a % 2 == 0])původní pole
a = reshape(arange(100, 125), (5, 5))filtrací zíkáme jednorozměrný vektor
print(a[a % 2 == 0])původní pole
a1 = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])tisk výsledku operace
print(a1.max())tisk výsledku operace
print(a1.min())tisk výsledku operace
print(a1.sum())původní pole
a1 = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])sloupce
print(a1.max(axis=0))sloupce
print(a1.sum(axis=0))řádky
print(a1.max(axis=1))řádky
print(a1.sum(axis=1))původní pole
a = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])původní pole
b = abs(a-5)tisk výsledku operace
print(b)Padesát hodnot v zadaném intervalu
a = linspace(0, pi/2)Výpočet sinů těchto hodnot
b = sin(a)tisk výsledku operace
print(b)původní pole
a1 = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])aplikace anonymní funkce
a = apply_along_axis(lambda v: v[1], 0, a1)tisk výsledku operace
print(a)aplikace anonymní funkce
a = apply_along_axis(lambda v: v[1], 1, a1)tisk výsledku operace
print(a)a = array([[2]])pravá strana rovnice
b = array([10])řešení
c = linalg.solve(a, b)tisk výsledku operace
print(c)a = array([[1, 1], [1, -1]])matice pravých stran rovnic
b = array([2, 0])výpočet
c = linalg.solve(a, b)tisk výsledku operace
print(c)což znamená: x=1 y=1
matice koeficientů původních rovnic
a = array([[2, 3, 7], [3, 8, 1], [0, 3, 3]])matice pravých stran rovnic
b = array([47, 50, 27])výpočet
c = linalg.solve(a, b)tisk výsledku operace
print(c)╔════════════╤═════════════════════════════════════╗
║ Podbalíček │ Stručný popis podbalíčku ║
╟────────────┼─────────────────────────────────────╢
║ doc │ obsahuje dokumentaci ke knihovně i ║
║ │ k základním konstrukcím a operacím ║
║ │ ║
║ lib │ základní knihovní funkce používané ║
║ │ i některými dalšími podbalíčky ║
║ │ ║
║ random │ funkce pro využití generátorů ║
║ │ pseudonáhodných číselných hodnot ║
║ │ ║
║ linalg │ funkce z oblasti lineární algebry ║
║ │ ║
║ fft │ rychlá Fourierova transformace a ║
║ │ pomocné funkce související s FFT ║
║ │ ║
║ polynomial │ funkce pro práci s polynomy ║
║ │ ║
║ testing │ nástroje pro psaní testů ║
║ │ ║
║ f2py │ (jednosměrné) rozhraní mezi jazyky ║
║ │ Fortran a Python ║
║ │ ║
║ distutils │ další pomocné nástroje, které přímo ║
║ │ nesouvisí s výpočty nad vektory a ║
║ │ maticemi, ale se způsobem ║
║ │ balíčkování modulů ║
╚════════════╧═════════════════════════════════════╝