numpy — operace s poli kompatibilní s numpy¶
Podmodul numpy modulu ulab poskytuje API kompatibilní s numpy postavené kolem n-rozměrného typu pole ndarray. Implementuje pečlivě vybranou podmnožinu CPython numpy: konstrukci polí, prvkovou matematiku, redukce a statistiku, lineární algebru, FFT, generování náhodných čísel, prokládání polynomy a základní I/O.
Podmodul se konvenčně importuje jako np
from ulab import numpy as np
a = np.array([1, 2, 3, 4], dtype=np.float)
b = np.linspace(0, 1, num=5)
c = np.dot(a.reshape((2, 2)), a.reshape((2, 2)))
Každý argument dtype je jedna z celočíselných konstant dostupných na úrovni modulu: numpy.bool, numpy.uint8, numpy.int8, numpy.uint16, numpy.int16, numpy.float (výchozí) a (je-li zkompilována podpora komplexních čísel) numpy.complex. Výsledný typ ndarray odkazuje na numpy.ndarray.
Podmoduly¶
třída ndarray — n-rozměrné pole¶
ndarray je n-rozměrný kontejner s informací o dtype, který tvoří jádro numpy / ulab. Data jsou uložena ve souvislém bloku, jehož interpretaci popisuje malá hlavička (dtype, shape, strides, ndim, itemsize). Mnoho operací – reshape, transpose, krájení – pouze upravuje tuto hlavičku, a jsou proto velmi levné; metody, které alokují nové úložiště (copy, flatten, většina aritmetiky), vracejí nové husté pole.
Stejný typ je dostupný jako ulab.ndarray, numpy.ndarray a (v rámci této stránky) jednoduše ndarray.
- class numpy.ndarray(values: ndarray | bytes | list | tuple, *, dtype: int = numpy.float)¶
Vytvoří nové
ndarray.- Parametry:
values – Zdrojová data. Buď jiné
ndarray(které se hluboce zkopíruje, s konverzí typu, pokud sedtypeliší), nebo libovolná MicroPython iterovatelná struktura. Vnořené iterovatelné struktury produkují vícerozměrná pole; všechny vnitřní iterovatelné struktury musí mít stejnou délku, jinak je vyvolánValueError.dtype – Typ prvku pro nové pole. Jeden z celočíselných typových kódů dostupných v
numpy(numpy.bool,numpy.uint8,numpy.int8,numpy.uint16,numpy.int16,numpy.floata – je-li podporováno –numpy.complex), nebo instancedtype. Výchozí jenumpy.float.
Tovární funkce
numpy.arrayje konvenčním způsobem vytvořeníndarray; přeposílá data tomuto konstruktoru.- byteswap(*, inplace: bool = False) ndarray¶
Prohodí pořadí bajtů každého prvku. U polí
uint16,int16,floatacomplexto obrátí pořadí bajtů v rámci každého prvku, což je užitečné při zpracování dat z periferií, jejichž endianita neodpovídá endianitě mikrokontroléru. U jednobajtových dtype (bool,uint8,int8) jde o operaci bez efektu, která vrací pohled nebo kopii.Pokud je
inplaceFalse(výchozí), vrátí se novéndarraya originál zůstane nedotčen. Pokud jeinplaceTrue, bajtyselfse prohodí na místě a vrátí se pohled naself.
- copy() ndarray¶
Vrátí novou hustou, hlubokou kopii pole. Kopie vlastní svá vlastní data; její úpravy nemají vliv na originál.
- flatten(*, order: str = 'C') ndarray¶
Vrátí novou jednorozměrnou kopii pole.
- Parametry:
order –
'C'(výchozí) prochází data v C pořadí (poslední osa se mění nejrychleji);'F'je prochází v Fortran pořadí (první osa se mění nejrychleji).
- reshape(shape: int | tuple[int, ...]) ndarray¶
Vrátí pohled na pole s novým tvarem. Celkový počet prvků se nesmí změnit, jinak je vyvolán
ValueError. Dostupné pouze přiULAB_MAX_DIMS > 1. Ekvivalentní přiřazení doshape.
- sort(*, axis: int | None = -1) None¶
Seřadí pole na místě.
- Parametry:
axis – Osa, podle které se řadí.
-1(výchozí) řadí podle poslední osy;Nonepole nejprve zploští a poté seřadí.
- tobytes() bytearray¶
Vrátí
bytearray, který je aliasem na podkladový datový buffer pole. Zápisy přes vrácenébytearrayupravují pole na místě. VyvoláValueError, pokud pole není husté (např. krájený pohled).
- transpose() ndarray¶
Vrátí transpozici pole (s obrácenými osami). U jednorozměrných polí vrací
self. Dostupné pouze přiULAB_MAX_DIMS > 1. AtributTje zkratkou pro tuto metodu.
- dtype: dtype | int¶
Datový typ prvků pole. Vrací instanci
dtype, pokud je firmware sestaven s povolenýmULAB_HAS_DTYPE_OBJECT, jinak podkladový jednoznakový typový kód jako celé číslo.
- flat: flatiter¶
Plochý iterátor, který poskytuje každý prvek pole v C pořadí. Na rozdíl od
flatten()iterováníflatnealokuje nové pole.
- shape: tuple[int, ...]¶
Délky pole podél každé osy. Přiřazení n-tice do
shapepřetvaruje pole na místě (ekvivalentníreshape()).
- strides: tuple[int, ...]¶
Počet bajtů, o které je třeba se posunout v paměti podél každé osy, aby se dosáhlo dalšího prvku podél této osy.
- T: ndarray¶
Transpozice pole; ekvivalentní
transpose().
Podporované operátory¶
Instance ndarray podporují následující operátory. Binární operátory rozšiřují (broadcast) své operandy podle standardních pravidel broadcastingu numpy a řídí se pravidly numpy pro povyšování typů (např. uint8 + int8 => int16, uint16 + int16 => float); operace zahrnující komplexní operand produkují komplexní výsledek.
Aritmetika (binární): +, -, *, /, //, %, **. Podporovány jsou také reflektované (pravostranné) operandy a varianty na místě +=, -=, *=, /=, %=, **=. Přijímány jsou jak formy ndarray-s-ndarray, tak ndarray-se-skalárem. Celočíselné dělení (//) a operátor modulo (%) nejsou pro pole complex implementovány.
Porovnání: ==, !=, <, <=, >, >=. Každý vrací booleovské ndarray o broadcast tvaru.
Bitové (pouze celočíselná pole): &, |, ^. Aplikace na pole float nebo complex vyvolá TypeError.
Unární: + (vrací kopii), - (negace; u bezznaménkových dtype se hodnoty zalamují modulo \(2^N\)), abs() (prvková absolutní hodnota; u bezznaménkových dtype vrací kopii bez výpočtu), ~ (bitová inverze, pouze celočíselné dtype), len() (vrací délku první osy).
Indexování a krájení: a[i], a[i, j, ...], a[start:stop:step], indexování booleovskou maskou (a[mask]) a indexování celočíselným polem (fancy indexing) jsou podporovány jak při čtení, tak při zápisu.
Iterace: Iterování přes ndarray poskytuje podpole podél první osy (po jednom prvku u 1-D polí). Pro iterování přes každý skalární prvek nezávisle na dimenzionalitě použijte flat.
Operátor maticového násobení @ není implementován; místo něj použijte numpy.dot (np.dot(a, b)).
Operátory posunu (<<, >>) nejsou na úrovni operátoru implementovány. Pro prvkové celočíselné posuny použijte numpy.left_shift a numpy.right_shift.
Konstrukce polí¶
- numpy.array(values: ndarray | list | tuple, *, dtype: int = float) ndarray¶
Sestaví nové
ndarrayz vnořené iterovatelné struktury čísel. Ekvivalentní alternativní konstruktor pronumpy.ndarray.
- numpy.arange(start: int | float, stop: int | float | None = None, step: int | float = 1, *, dtype: int | None = None) ndarray¶
Vrátí rovnoměrně rozložené hodnoty na polootevřeném intervalu
[start, stop). Je-li zadán pouze jeden poziční argument, je považován zastopsstart = 0. Je-li dtype vynechán, je odvozen ze vstupů (celočíselný, jsou-li všechny start, stop, step celá čísla a v rozsahu).
- numpy.asarray(a: ndarray | list | tuple, *, dtype: int | None = None) ndarray¶
Pokud je a již
ndarray, jehož dtype odpovídá dtype (nebo je dtypeNone), vrátí a beze změny; jinak vytvoří nové pole (s požadovanou konverzí dtype, je-li zadána). Iterovatelné struktury se konvertují jako vnumpy.array.
- numpy.concatenate(arrays: tuple, *, axis: int = 0) ndarray¶
Spojí posloupnost
ndarraypodél existující osy axis. Všechna vstupní pole musí sdílet stejný dtype, ndim a tvar na každé ose kromě axis.
- numpy.diag(a: ndarray, *, k: int = 0) ndarray¶
Pro 2-D a vrátí 1-D pole obsahující k-tou diagonálu. Pro 1-D a vrátí 2-D čtvercové pole s a umístěným na k-té diagonále. k může být kladné (nad hlavní diagonálou) nebo záporné (pod ní).
- numpy.empty(shape: int | tuple[int, ...], *, dtype: int = float) ndarray¶
Alias pro
zeros; vrací pole vyplněné nulami o tvaru shape a typu dtype. (ulab nenechává buffer neinicializovaný.)
- numpy.eye(N: int, M: int | None = None, k: int = 0, *, dtype: int = float) ndarray¶
Vrátí 2-D pole N x M (čtvercové N x N, je-li M
None) s jedničkami na k-té diagonále a nulami jinde.
- numpy.frombuffer(buffer: bytes, *, dtype: int = float, count: int = -1, offset: int = 0) ndarray¶
Interpretuje objekt implementující buffer protokol jako 1-D
ndarraytypu dtype. count je počet položek ke čtení (-1čte všechny dostupné položky); offset přeskočí tolik bajtů na začátku bufferu.
- numpy.full(shape: int | tuple[int, ...], fill_value: int | float | bool, *, dtype: int = float) ndarray¶
Vrátí nové pole o tvaru shape a typu dtype, kde je každý prvek nastaven na fill_value.
- numpy.linspace(start: float, stop: float, num: int = 50, *, endpoint: bool = True, retstep: bool = False, dtype: int = float) ndarray | tuple[ndarray, float]¶
Vrátí num rovnoměrně rozložených vzorků na uzavřeném intervalu
[start, stop](nebo polootevřeném, je-li endpointFalse). Je-li retstepTrue, vrátí n-tici(samples, step). Komplexní start/stop produkují komplexní pole (je-li povolena podpora komplexních čísel).
- numpy.logspace(start: float, stop: float, num: int = 50, *, base: float = 10.0, endpoint: bool = True, dtype: int = float) ndarray¶
Vrátí num vzorků rozložených rovnoměrně na logaritmické stupnici: výsledek začíná na
base ** starta končí nabase ** stop.
- numpy.meshgrid(*xi: ndarray, indexing: str = 'xy') tuple[ndarray, ...]¶
Vrátí n-tici souřadnicových matic z posloupnosti jednorozměrných souřadnicových polí. Při indexing
'xy'(výchozí) jsou první dva vstupy považovány za kartézské souřadnice a jejich výstupní osy se prohodí; při'ij'se použije maticové indexování. Implementace odpovídá ekvivalentu z NumPy scopy=Trueasparse=False.
Inspekce / výpis¶
- numpy.get_printoptions() dict¶
Vrátí aktuální možnosti výpisu polí jako slovník s klíči
thresholdaedgeitems.
- numpy.set_printoptions(*, threshold: int | None = None, edgeitems: int | None = None) None¶
Nastaví možnosti výpisu polí. threshold je maximální počet prvků pole vypsaných v plném rozsahu; edgeitems je počet položek zobrazených na každém konci osy, když je pole shrnuto.
Porovnání¶
- numpy.clip(a: ndarray | int | float, a_min: ndarray | int | float, a_max: ndarray | int | float) ndarray | int | float¶
Ořeže hodnoty a tak, aby
a_min <= result <= a_max. Ekvivalentnímaximum(a_min, minimum(a, a_max)); broadcasting se řídí stejnými pravidly jakominimum.
- numpy.equal(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | bool¶
Prvkové
x1 == x2; vrací booleovskéndarray(nebo skalárbool, jsou-li oba vstupy skaláry). Poskytnuto pro přenositelnost – operátor==na polích dává stejný výsledek.
- numpy.not_equal(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | bool¶
Prvkové
x1 != x2; booleovský protějšekequal.
- numpy.isfinite(x: ndarray | int | float) ndarray | bool¶
Vrátí booleovské pole (nebo skalár), které je
Truetam, kde je vstup konečný. Celočíselné vstupy jsou vždy konečné.
- numpy.isinf(x: ndarray | int | float) ndarray | bool¶
Vrátí booleovské pole (nebo skalár), které je
Truetam, kde je vstup nekonečný. Celočíselné vstupy nejsou nikdy nekonečné.
- numpy.maximum(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | int | float¶
Prvkové maximum dvou polí / skalárů. Argumenty se broadcastují dohromady; liší-li se dtype, výstup se povýší.
- numpy.minimum(x1: ndarray | int | float, x2: ndarray | int | float) ndarray | int | float¶
Prvkové minimum dvou polí / skalárů; protějšek
maximum.
Numerické redukce¶
- numpy.all(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | bool¶
Otestuje, zda všechny prvky podél osy axis vyhodnocují na
True. Saxis=None(výchozí) se testuje zploštěné pole a vrátí se jedinýbool.
- numpy.any(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | bool¶
Otestuje, zda libovolný prvek podél osy axis vyhodnocuje na
True. Saxis=Nonese testuje zploštěné pole.
- numpy.argmax(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | int¶
Vrátí index maximálního prvku podél osy axis. S
axis=Nonese pole zploští a vrátí se jediné celé číslo.
- numpy.argmin(a: ndarray | list | tuple, *, axis: int | None = None) ndarray | int¶
Vrátí index minimálního prvku podél osy axis. S
axis=Nonese pole zploští a vrátí se jediné celé číslo.
- numpy.argsort(a: ndarray, *, axis: int = -1) ndarray¶
Vrátí bezznaménkové celočíselné indexové
ndarray, jehož položky řadí a vzestupně podél osy axis. Výstupní dtype jeuint16, takže žádná osa nesmí přesáhnout 65535 prvků.axis=Nonenení podporováno.
- numpy.diff(a: ndarray, *, n: int = 1, axis: int = -1) ndarray¶
Vrátí n-tou diskrétní dopřednou diferenci a podél osy axis. n musí být v rozsahu
0..9(diferenciační šablona je uložena vint8); délka osy axis se zmenší o n. Klíčová slova numpyprependaappendnejsou implementována.
- numpy.flip(a: ndarray, *, axis: int | None = None) ndarray¶
Vrátí nové pole s obráceným pořadím prvků podél osy axis; s
axis=Nonese pole obrátí podél každé osy.
- numpy.max(a: ndarray | list | tuple, *, axis: int | None = None, keepdims: bool = False) ndarray | int | float¶
Vrátí maximální prvek podél osy axis. S
axis=None(výchozí) se zploštěné pole zredukuje na skalár. Klíčové slovo numpyoutnení implementováno.
- numpy.min(a: ndarray | list | tuple, *, axis: int | None = None, keepdims: bool = False) ndarray | int | float¶
Vrátí minimální prvek podél osy axis; protějšek
max.
- numpy.mean(a: ndarray | list | tuple, *, axis: int | None = None, keepdims: bool = False) ndarray | float¶
Vrátí aritmetický průměr podél osy axis. S
axis=None(výchozí) se vrátí průměr zploštěného pole jakofloat.
- numpy.median(a: ndarray, *, axis: int | None = None) ndarray | float¶
Vrátí medián podél osy axis. S
axis=Nonese pole nejprve zploští. Výstupní dtype je vždy float.
- numpy.roll(a: ndarray, shift: int, *, axis: int | None = None) ndarray¶
Vrátí a s prvky cyklicky posunutými o shift pozic. S
axis=None(výchozí) se pole nejprve zploští. Záporné posuny rolují opačným směrem.
- numpy.sort(a: ndarray, *, axis: int = -1) ndarray¶
Vrátí seřazenou kopii a podél osy axis pomocí haldového řazení. S
axis=Nonese pole nejprve zploští. Klíčová slova numpykindaordernejsou implementována.
Statistika¶
- numpy.bincount(x: ndarray, *, weights: ndarray | None = None, minlength: int | None = None) ndarray¶
Spočítá počet výskytů každé hodnoty v jednorozměrném nezáporném celočíselném poli x. Dtype x musí být
uint8nebouint16. Je-li zadáno weights, každá položka x přispívá svou odpovídající váhou namísto1a výstup je typufloat; jinak je výstup typuuint16. Je-li zadáno minlength, výstupní pole má alespoň tolik prvků (přebytečné položky jsou nulové).
Transformace¶
- numpy.compress(condition: ndarray | list | tuple, a: ndarray, *, axis: int | None = None) ndarray¶
Vrátí řezy a vybrané podél osy axis booleovskou podmínkou condition. S
axis=Nonese použije zploštěné pole.
- numpy.delete(a: ndarray, indices: int | ndarray | list | tuple | range, *, axis: int | None = None) ndarray¶
Vrátí kopii a s odstraněnými položkami na indexech indices podél osy axis. S
axis=Nonese pole nejprve zploští. Záporné indexy se počítají od konce osy axis; indices se před odstraněním interně seřadí.
Aproximace¶
- numpy.interp(x: ndarray, xp: ndarray, fp: ndarray, *, left: float | None = None, right: float | None = None) ndarray¶
Jednorozměrná lineární interpolace. xp musí být monotónně rostoucí 1-D pole nezávislých hodnot; fp obsahuje odpovídající závislé hodnoty; x jsou body, ve kterých se interpolant vyhodnocuje. left a right přepisují hodnotu vrácenou pro
x < xp[0]resp.x > xp[-1](výchozí:fp[0]afp[-1]).
Výběr¶
- numpy.take(a: ndarray, indices: ndarray | list | tuple, *, axis: int | None = None, out: ndarray | None = None, mode: str | None = None) ndarray¶
Vezme prvky z a na zadaných indexech indices podél osy axis. S
axis=Nonese použije zploštěné pole. mode vybírá chování při překročení mezí:"raise"(výchozí – vyvoláValueError),"wrap"(modulo délka osy) nebo"clip"(ořez na platný rozsah; záporné indexy nejsou povoleny). Je-li zadáno out, výsledek se do něj zapíše.
Bitové operace¶
- numpy.bitwise_and(x1: ndarray, x2: ndarray) ndarray¶
Prvkové bitové AND dvou celočíselných polí; broadcasting je podporován. Neceločíselný dtype vyvolá výjimku.
Filtrování¶
Polynomy¶
I/O¶
- numpy.load(file: str) ndarray¶
Načte pole dříve zapsané pomocí
saveze souboru file (platformově nezávislý formát.npyod numpy). Endianita se převádí za běhu, pokud se pořadí bajtů souboru liší od pořadí hostitele.
- numpy.loadtxt(file: str, *, delimiter: str | None = None, comments: str = '#', max_rows: int = -1, usecols: int | ndarray | list | tuple | None = None, dtype: int = float, skiprows: int = 0) ndarray¶
Načte číselná data z textového souboru file a vrátí je jako
ndarray. delimiter je výchozí bílý znak; comments je značka řádkového komentáře; max_rows omezuje počet načtených řádků dat (-1pro všechny); usecols vybírá sloupce podle indexu; skiprows přeskočí tolik úvodních řádků. Není-li dtype float, hodnoty se konvertují zaokrouhlením.
- numpy.save(file: str, a: ndarray) None¶
Uloží a do souboru file v platformově nezávislém formátu
.npyod numpy.
- numpy.savetxt(file: str, a: ndarray, *, delimiter: str = ' ', header: str | None = None, footer: str | None = None, comments: str = '# ') None¶
Zapíše a do souboru file jako text. delimiter odděluje hodnoty v rámci řádku; header a footer, jsou-li zadány, se zapíší před/za data, každý s prefixem comments. Hodnoty se zapisují jako čísla s plovoucí desetinnou čárkou.
Pomocné funkce pro komplexní čísla¶
Tyto funkce jsou dostupné pouze tehdy, byl-li ulab zkompilován s podporou komplexních čísel (ULAB_SUPPORTS_COMPLEX).
- numpy.real(val: ndarray) ndarray¶
Vrátí reálnou část val. Pro vstup reálného dtype vrátí kopii zachovávající dtype; pro komplexní vstup vrátí float
ndarray.
- numpy.imag(val: ndarray) ndarray¶
Vrátí imaginární část val. Pro vstup reálného dtype vrátí pole nul se stejným dtype; pro komplexní vstup vrátí float
ndarray.
Univerzální funkce¶
Prvkové matematické funkce. Každá přijímá skalár nebo ndarray a vrací výsledek odpovídajícího tvaru (float skalár pro skalární vstup, ndarray pro polní vstup). Je-li volána s ndarray, výsledkem je nové ndarray s plovoucí desetinnou čárkou; lze předat volitelné klíčové slovo out pro zápis výsledku do předem alokovaného float ndarray stejné velikosti.
- numpy.acos(x: ndarray | float, /) ndarray | float¶
Vypočítá inverzní kosinus (arkuskosinus) každého prvku x; výsledek je v radiánech.
- numpy.acosh(x: ndarray | float, /) ndarray | float¶
Vypočítá inverzní hyperbolický kosinus každého prvku x.
- numpy.arctan2(y: ndarray | float, x: ndarray | float, /) ndarray | float¶
Vypočítá dvouargumentový inverzní tangens
atan2(y, x)po prvcích; podporuje broadcasting mezi dvěma vstupy.
- numpy.around(x: ndarray, /, decimals: int = 0) ndarray¶
Zaokrouhlí prvky
ndarrayx na zadaný počet desetinných míst decimals; první argument musí býtndarray.
- numpy.asin(x: ndarray | float, /) ndarray | float¶
Vypočítá inverzní sinus (arkussinus) každého prvku x; výsledek je v radiánech.
- numpy.asinh(x: ndarray | float, /) ndarray | float¶
Vypočítá inverzní hyperbolický sinus každého prvku x.
- numpy.atan(x: ndarray | float, /) ndarray | float¶
Vypočítá inverzní tangens (arkustangens) každého prvku x; výsledek je v radiánech.
- numpy.atanh(x: ndarray | float, /) ndarray | float¶
Vypočítá inverzní hyperbolický tangens každého prvku x.
- numpy.ceil(x: ndarray | float, /) ndarray | float¶
Vypočítá strop (nejmenší celé číslo, které není menší než hodnota) každého prvku x.
- numpy.exp(x: ndarray | float, /) ndarray | float¶
Vypočítá exponenciálu
e**xkaždého prvku x; při komplexním vstupu může vrátit komplexníndarray(je-li povolena podpora komplexních čísel).
- numpy.expm1(x: ndarray | float, /) ndarray | float¶
Vypočítá
exp(x) - 1každého prvku x se zlepšenou přesností v okolí nuly.
- numpy.floor(x: ndarray | float, /) ndarray | float¶
Vypočítá podlahu (největší celé číslo, které není větší než hodnota) každého prvku x.
- numpy.sinc(x: ndarray | float, /) ndarray | float¶
Vypočítá normalizovanou funkci sinc
sin(pi*x) / (pi*x)každého prvku x.