Numerický Python: Typy, moduly a praktické využití

Poslední aktualizace: 05/17/2026
  • Python nabízí základní číselné typy (int, float, complex, bool) a navíc výkonné pomocné typy jako math, cmath, decimal a random pro každodenní výpočty.
  • Modul numbers definuje abstraktní základní třídy, takže mnoho vestavěných, NumPy a vlastních číselných typů lze jednotně považovat za instance třídy Number.
  • Zaokrouhlovací režimy, speciální hodnoty (NaN, nekonečna) a přesná desetinná aritmetika pomocí decimalního systému jsou klíčové pro robustní vědecký a finanční kód.
  • Širší numerický ekosystém Pythonu, zejména NumPy, rozšiřuje základní typy o celá čísla s pevnou šířkou a vysoce výkonná pole pro náročné výpočty.

numerický koncept Pythonu

Práce s čísly je jádrem většiny programů v Pythonu., ať už vytváříte jednoduchý skript, zpracováváte vědecká data nebo vytváříte prototyp algoritmu. Pochopení toho, jak Python reprezentuje a manipuluje s číselnými hodnotami, je prvním krokem k napsání spolehlivého a efektivního kódu, který se chová tak, jak očekáváte.

Když lidé mluví o „numerickém Pythonu“, často tím myslí dvě věci.na jedné straně vestavěné číselné typy a standardní knihovní nástroje jako math, cmath, decimal, random a numbersna druhé straně širší ekosystém numerických výpočtů s knihovnami jako NumPy, které rozšiřují jazyk o další numerické typy a vektorizované operace. Tato příručka vás podrobně provede těmito základy, od základních typů až po pokročilé abstrakce.

Základní číselné typy v Pythonu

Python definuje několik vestavěných číselných kategorií, které pokrývají většinu každodenních potřeb: celá čísla pro celá čísla, čísla s plovoucí desetinnou čárkou pro reálné hodnoty s desetinnými čísly, komplexní čísla pro hodnoty s reálnou a imaginární částí a speciální booleovský typ, který se chová jako velmi malý člen rodiny celých čísel. Všechny se hladce integrují s aritmetickými operátory Pythonu.

Celá čísla (int) představují celá čísla, kladná nebo záporná, bez desetinné čárkyVe standardním Pythonu neexistuje žádná pevná horní hranice jejich velikosti; dokud máte paměť, vaše celé číslo může růst. Hodnoty jako 1, -5 or 20234567890123456789 jsou všechny platné int případy a můžete to potvrdit pomocí type(1) or type(-5), který se vrátí <class 'int'>.

Čísla s plovoucí desetinnou čárkou (float) se používají pro reálná čísla se zlomkovou složkouJsou zapsány s desetinnou čárkou, například 2.0, -7.823457 or 0.5, nebo s vědeckou notací jako 1e8 (což znamená 100 000 000). Když provádíte operace jako dělení, a to i mezi celými čísly, Python často povýší výsledek na float; například, 9 / 2 výnosů 4.5, a type(4.5) is <class 'float'>.

Komplexní čísla (complex) kombinují reálnou a imaginární část, psané s koncovkou j pro imaginární jednotku. Hodnota jako 2 + 3j má reálnou složku 2 a imaginární složku 3. Můžete je sestrojit přímo (např. 3.14j) a zkontrolujte je pomocí atributů, jako například .real a .imagnebo volání .conjugate() k získání komplexně konjugovaného čísla. Tyto funkce jsou obzvláště oblíbené v inženýrství, zpracování signálů a vědeckých výpočtech.

Booleovské hodnoty (bool) jsou technicky také numerické, Protože True a False chovají se v aritmetických výrazech jako celá čísla 1 a 0. Například True + 2 vyhodnocuje se jako 3Interně, bool je podtřídou int, a proto se booleovské hodnoty bezproblémově integrují do výpočtů a porovnávání.

Python umožňuje volně kombinovat tyto číselné typy ve výrazecha v případě potřeby povýšit na obecnější typ. Přidání int na A float výnosy floata kombinace čísel s desetinnou čárkou a komplexních čísel vede k komplexnímu výsledku: výrazy jako 1 + 1.0, 2.0 + (3 + 5j) or 6 / (5 + 8j) veškerá práce bez zbytečných ceremonií.

číselné typy v Pythonu

Aritmetické operátory a chování při dělení

Jakmile máte číselné hodnoty, můžete s nimi pracovat pomocí obvyklých aritmetických operátorů.sčítání (+), odčítání (-), násobení (*), divize (/), rozdělení podlahy (//), umocňování (**) a modulo (%). Python je aplikuje na celá čísla, čísla s desetinnou čárkou a komplexní čísla a podle potřeby provádí povýšení typu.

Dělení je jednou z oblastí, kde je design Pythonu velmi promyšlený., Použitím / vždy vrátí výsledek s plovoucí desetinnou čárkou, pokud jsou oba argumenty číselné, i když jsou oba celá čísla. Takže 9 / 2 výsledky v 4.5, Ne 4To vás povzbuzuje k tomu, abyste ve výchozím nastavení uvažovali v termínech dělení reálných čísel, což je obvykle to, co chcete ve vědeckých nebo finančních výpočtech.

Pokud potřebujete celočíselné dělení, které zahodí zlomkovou část, použijete operátor dělení podlahové části. //, Například, 9 // 2 produkuje 4, a -9 // 2 výnosů -5, protože výsledek je zaokrouhlený dolů směrem k mínus nekonečnu. Kromě toho, divmod(a, b) vrátí podíl i zbytek najednou, čímž vrátí dvojici, která odráží (a // b, a % b).

Python v zákulisí pečlivě koordinuje, jak různé číselné varianty interagujíInterní vzorec, který můžete vidět ve standardní knihovně, je myšlenka „operátorových záložních operátorů“: funkce, které nejprve vyzkoušejí implementaci specifickou pro daný typ, například pro racionální čísla, a poté se vrátí k vestavěným operátorům, pokud je jeden operand regulární. int, float or complexDíky tomu mohou vlastní číselné typy spolupracovat s aritmetickým systémem Pythonu pomocí speciálních metod, jako je __add__ a __radd__.

Knihovní kód pro racionální aritmetiku, jako například Fraction typ, tuto strategii jasně ilustrujePři přidávání dvou Fraction V některých případech vypočítá nový zlomek křížovým vynásobením čitatelů a jmenovatelů. Pokud přidáte Fraction na prosté celé číslo nebo instanci numbers.Rational, používá přesný racionální algoritmus. Pokud je druhý operand float or complex, převede se na tento širší typ a deleguje na běžné operátory, čímž zachová konzistentní a intuitivní chování.

Vestavěné numerické funkce

Kromě neformátovaných operátorů se Python dodává se sadou vestavěných funkcí, které umí pracovat s čísly.Tyto funkce jsou vždy dostupné bez nutnosti importu a fungují napříč standardními číselnými typy a také s jakýmikoli vlastními objekty, které implementují správné speciální metody.

abs(x) vrací absolutní hodnotu argumentu, čímž se záporná čísla stanou kladnými a kladné hodnoty se nezmění. Pokud předáte objekt, který definuje __abs__(), Python deleguje na tuto metodu. Pro komplexní čísla, abs() vrací velikost (vzdálenost od počátku v komplexní rovině).

round(x, ndigits) vrátí hodnotu zaokrouhlenou na daný počet desetinných míst. Jestliže ndigits je vynecháno nebo None, vrací nejbližší celé číslo. Na rozdíl od učebnicového pravidla „zaokrouhlování poloviny nahoru“ vestavěná funkce Pythonu round používá strategii „zaokrouhlování poloviny na sudý výsledek“ pro remízy, aby se snížilo statistické zkreslení v opakovaných výpočtech.

Konverzní funkce jako int() a float() konstruovat čísla z jiných objektůVolání int(x) u čísla s plovoucí čárkou zahodí zlomkovou část (například int(1.9) is 1), A float(x) vytváří reprezentaci s plovoucí desetinnou čárkou z celých čísel, řetězců nebo kompatibilních objektů. Při převodu z typu float na int nedochází k žádnému zaokrouhlování; desetinná část se jednoduše ořízne.

Další vestavěné moduly slouží k reprezentaci a agregaci.Funkce jako hex() a oct() vrátit řetězcové reprezentace celých čísel v hexadecimální nebo oktální soustavě s příslušnými prefixy (0x a 0o). Agregační pomocníci, jako například max() a min() prohledá iterovatelný objekt nebo řadu argumentů, aby se našla největší nebo nejmenší hodnota, zatímco pow() a ** Operátor vypočítává mocniny a volitelně přijímá třetí argument pro modulární umocňování.

Pokročilé numerické nástroje: matematika, cmath a decimal

Pro sofistikovanější výpočty nabízí Python specializované moduly standardních knihoven. místo toho, aby se nafukoval základní jazyk. Pro numerickou práci jsou nejdůležitější math, cmath a decimal, přičemž každý z nich se zaměřuje na určitou podmnožinu problémů.

Jedno math Modul se zaměřuje na matematiku s plovoucí desetinnou čárkou s reálnými hodnotamiPo importu pomocí import math, získáte přístup k funkcím a konstantám běžně potřebným v inženýrství, fyzice a každodenní analytice, vše implementované v efektivním kódu C a fungující na float hodnoty.

math zahrnuje nástroje pro teorii čísel a reprezentaci jako math.ceil() pro zaokrouhlení na nejbližší celé číslo nahoru, math.floor() pro zaokrouhlování dolů, math.modf() rozdělit číslo s plovoucí čárkou na zlomkovou a celočíselnou část a math.frexp() / math.ldexp() pro práci s interní binární reprezentací. Poskytuje také mocninové a logaritmické rutiny, jako například math.exp(), math.log(), math.log10(), math.pow() a math.sqrt(), stejně jako trigonometrické a hyperbolické funkce, jako například math.sin(), math.cos(), math.tan(), math.asin(), math.acos(), math.atan(), math.atan2(), math.sinh(), math.cosh() a math.tanh().

pro pohodlí math exportuje základní konstanty jako math.pi a math.eTy se hodí vždy, když počítáte plochy, úhly nebo exponenciální růst a chcete konzistentní hodnoty s dobrou přesností v celém kódu.

Pokud potřebujete pracovat s komplexními čísly, cmath modul hraje stejnou roli pro komplexní rovinuJeho API zrcadla math ale používá komplexní argumenty a vrací komplexní výsledky, takže můžete vypočítat komplexní exponenciály, logaritmy a trigonometrické funkce bez ručního rozkladu čísel na reálnou a imaginární část.

Jedno decimal modul se zaměřuje na jiný problém: přesnou desítkovou aritmetikuStandardní binární čísla s plovoucí desetinnou čárkou nedokážou přesně reprezentovat mnoho desetinných zlomků, takže výpočty jako 0.1 + 0.2 přinést mírně odlišný výsledek. decimal.Decimal obchází tento problém použitím desítkové aritmetiky s libovolnou přesností, což je ideální pro finanční aplikace a všude, kde je nutné velmi přesně kontrolovat zaokrouhlovací chování.

Ve výchozím nastavení se operace s plovoucí desetinnou čárkou v Pythonu řídí standardem IEEE-754 a používají reprezentaci souřadnic base-2.Pokud hodnota leží přesně v polovině mezi dvěma reprezentovatelnými čísly, použije se princip „zaokrouhlení poloviny na sudou“, což znamená, že polovina hodnot se zaokrouhlí dolů a polovina nahoru. Tím se zabrání systematickému posunu ve velkých výpočtech. Pokud chcete komerční sémantiku „zaokrouhlení poloviny nahoru“, můžete nakonfigurovat... decimal kontext k použití ROUND_HALF_UP, což vždy posouvá hodnoty o 5 od nuly.

Práce s číselnými typy v praxi

Zkoumání interaktivního chování čísel je skvělý způsob, jak si vybudovat intuici.Spusťte interpret Pythonu a vytvořte kombinaci celých čísel, čísel s desetinnou čárkou a komplexních hodnot, poté s nimi vyzkoušejte základní operace. Sčítání a násobení je jednoduché, ale obzvláště poučné je experimentovat s dělením, dělením na poslední řádek, zaokrouhlováním a převody a sledovat, jak se mění typ výsledku.

Převod mezi číselnými typy je někdy nezbytný pro splnění očekávání API nebo pro zjednodušení logiky.Pokud máte číslo s plovoucí čárkou a chcete pouze jeho celočíselnou část, přiřaďte ho proměnné, jako je my_float = 1.9 a pak zavolejte my_int = int(my_float)Tisk my_int dává 1, a type(my_int) potvrzuje, že se jedná o intMějte na paměti, že zlomková část se spíše zahodí, než zaokrouhlí.

Opačný směr – přechod na obecnější typ – se často děje implicitně.Když sečtete celé číslo a číslo s desetinnou čárkou, Python vrátí číslo s desetinnou čárkou bez dotazu, protože soustava reálných čísel obsahuje celá čísla. Stejné povýšení nastane, když zkombinujete číslo s desetinnou čárkou a komplexní číslo: hodnota s desetinnou čárkou je považována za imaginární část nuly a výsledek je komplexní číslo.

Komplexní čísla obsahují několik vestavěných vymožeností, díky nimž působí přirozeně.Můžete si to přímo prohlédnout a.real a a.imag Chcete-li získat komponenty, zavolejte a.conjugate() obrátit znaménko imaginární části a předat je funkcím v cmath bez ruční konverze. I když je používáte jen zřídka, znalost jejich existence a jejich chování vám pomůže, když se setkáte s vědeckým kódem.

Při práci s daty s plovoucí desetinnou čárkou je vždy důležitá přesnost a preciznost.Efektivní přesnost standardního Pythonu float má přibližně 15 desetinných míst; nad tuto hranici může být 16. číslice nespolehlivá. Pro mnoho úkolů je to naprosto přijatelné, ale pokud požadujete přesnou desetinnou aritmetiku nebo předvídatelnější zaokrouhlování, decimal Modul vám poskytuje potřebnou kontrolu za cenu určitého výkonu.

Náhodná čísla a speciální číselné hodnoty

Generování náhodných čísel je dalším častým úkolem v numerických pracovních postupech v Pythonu., ať už vytváříte jednoduché hry, spouštíte simulace Monte Carlo nebo píšete testovací případy, které procvičují okrajové podmínky. Standardní knihovna random Modul poskytuje základy pro takové scénáře.

random.randint(a, b) vytváří pseudonáhodné celé číslo mezi a a b, včetněDíky tomu je snadné simulovat hody kostkami nebo vybírat náhodné indexy v seznamu. Pro čísla s plovoucí desetinnou čárkou se používají funkce jako random.random() a související pomocné funkce generují uniformní náhodná čísla v rozsazích, jako je [0.0, 1.0), připravená k škálování nebo transformaci pro vaši konkrétní distribuci.

Python také zpřístupňuje několik číselných hodnot, které představují neobvyklé nebo „okrajové“ veličiny.Jedním z nich je NaN („Není číslo“), získaný například voláním float('nan')NaN označuje nedefinované nebo nereprezentovatelné výsledky, jako například výsledek dělení nuly nulou nebo analýzy poškozeného číselného pole ze vstupních dat.

Kromě NaN podporuje Python kladné a záporné nekonečno., konstruovaný s použitím float('inf') a float('-inf')Tyto hodnoty jsou užitečné jako kontrolní hodnoty při inicializaci proměnných pro algoritmy, které hledají minimální nebo maximální hodnoty, nebo při modelování neohraničených rozsahů v numerických metodách.

Práce s NaN vyžaduje zvláštní opatrnost, protože se nechovají jako běžná čísla.Porovnání zahrnující NaN jsou vždy nepravdivá (i nan == nan) a aritmetika s NaN má tendenci šířit NaN skrze výsledek. I když se tato příručka podrobně nezabývá sémantikou NaN, znalost jejích zvláštností vám pomůže efektivněji ladit datové kanály a numerické algoritmy.

Abstraktní numerické hierarchie s modulem čísel

S tím, jak se váš kód stává sofistikovanějším, můžete potřebovat flexibilní způsob, jak rozpoznávat „číselné“ hodnoty. bez ruční kontroly každého jednotlivého typu betonu (jako např. int, float, complex a skaláry NumPy). Zde se nachází numbers modul poskytuje abstraktní hierarchii číselných typů.

Jedno numbers Modul definuje abstraktní základní třídy (ABC), které popisují numerické chování., Jako Number, Complex, Real, Rational a IntegralTyto třídy nejsou určeny k přímému vytváření instancí. Místo toho z nich dědí konkrétní číselné typy, které signalizují, že implementují požadované operace a vlastnosti.

Nejobecnější abeceda je numbers.Number, což představuje „libovolný číselný typ“Pokud chcete otestovat, zda by proměnná měla být považována za číselnou – například během ladění nebo při psaní malých utilitních skriptů – můžete kombinovat isinstance s touto abecedou. Například isinstance(x, Number) Vrací True pro vestavěné číselné typy a mnoho externích číselných typů, jako například různé skaláry NumPy.

Praktická ukázka využívá typy NumPy spolu s vestavěnými funkcemi PythonuPokud importujete NumPy jako np a pak smyčkou přecházet hodnoty jako 1, 1., -0.2, 1e8, np.int64(1), np.int0(10), np.int16(2), np.float64(10), np.complex64(10) a np.int32(89), volání isinstance(value, Number) U každého z nich uvidíte, že se všechny počítají jako číselné hodnoty. To vám ušetří psaní dlouhého řetězce typových kontrol pro každou konkrétní třídu.

Stojí za zmínku, že isinstance sám o sobě je při nadměrném použití považován za kódový „zápach“Přílišné spoléhání se na explicitní kontrolu typů může signalizovat hlubší problémy s návrhem objektově orientovaného programu. Nicméně pro rychlé ladění, průzkumné skripty nebo malé utility je kontrola proti... numbers.Number je mocný a pragmatický nástroj k ověření, zda se vaše proměnné skutečně chovají jako čísla.

Rozšířené numerické ekosystémy: NumPy a vlastní typy

Ačkoliv jádro Pythonu nabízí pouze malou sadu univerzálních číselných typů, širší ekosystém výrazně rozšiřuje vaše možnosti.Zejména NumPy zavádí mnohem více numerických variant určených pro efektivní výpočty nad velkými poli a maticemi.

NumPy definuje celočíselné typy s pevnou šířkou, jako například numpy.int64, numpy.int32, numpy.int16 a specializované aliasy jako numpy.int0Tyto typy se podobají typům, které se nacházejí v nízkoúrovňových, numericky orientovaných jazycích, jako jsou Fortran a C, kde je znalost přesné velikosti úložiště a chování čísel nezbytná pro výkon a interoperabilitu.

Kromě celých čísel nabízí NumPy typy jako numpy.float64 a numpy.complex64, spolu s mnoha dalšími, které se úhledně integrují s poli a ufuncy (univerzálními funkcemi). Tyto typy se obvykle registrují jako instance příslušných ABC z numbers modul, a proto kontroluje numbers.Number pracovat, jak je znázorněno dříve.

Pythonov návrh záměrně udržoval základní numerický model jednoduchý a přístupný.Místo toho, aby nutil každého uživatele spravovat desítky různých číselných typů, zaměřuje se na tři základní číselné typy (plus booleovské hodnoty) a zároveň usnadňuje specializovaným knihovnám rozšiřování tohoto repertoáru dle potřeby. Prostředí zaměřené na inženýrství, jako je prostředí vytvořené společností zabývající se simulačním softwarem, se bude přirozeně silně opírat o tyto rozšířené typy a knihovny.

Pokud si vytváříte vlastní numerické třídy, řiďte se vzory z numbers a fractions pomáhá vám začlenit se do ekosystémuPodtříděním příslušného ABC a implementací požadovaných speciálních metod (__add__, __radd__, __mul__, atd.), vaše vlastní typy mohou přirozeně interagovat s operátory Pythonu, vestavěnými numerickými funkcemi a dalšími numerickými knihovnami.

Celkově vzato, numerický Python kombinuje čistý typový systém jádra, výkonné moduly standardních knihoven a bohatý ekosystém knihoven. stejně jako NumPy, vytváří prostředí, kde se můžete pohodlně přesunout od jednoduché aritmetiky k pokročilým inženýrským výpočtům. Jakmile si osvojíte, jak do sebe zapadají celá čísla, čísla s desetinnou čárkou, komplexní čísla, speciální hodnoty, zaokrouhlovací pravidla a abstraktní numerické třídy, můžete s větší jistotou uvažovat o svém kódu, vyhýbat se jemným chybám a vybrat si správné nástroje pro každou numerickou úlohu, se kterou se setkáte.

Související příspěvky: