Articles

Numpy směrodatná odchylka vysvětlena

tento tutoriál vysvětlí, jak používat funkci Numpy směrodatná odchylka (AKA, np.std).

na vysoké úrovni je funkce Numpy směrodatná odchylka jednoduchá. Vypočítává směrodatnou odchylku hodnot v Numpy poli.

ale podrobnosti o tom, jak přesně funkce funguje, jsou trochu složité a vyžadují nějaké vysvětlení.

Jak již bylo řečeno, tento tutoriál vysvětlí, jak používat funkci Numpy směrodatné odchylky.

vysvětlí syntaxi np.std (), a ukázat vám jasné, krok za krokem příklady toho, jak funkce funguje.

výukový program je uspořádán do sekcí. Můžete kliknout na některý z následujících odkazů, který vás přenese do příslušné sekce.

Obsah:

  • velmi rychlý přehled Numpy
  • Úvod do Numpy směrodatná odchylka
  • syntaxe np.std
  • Numpy příklady směrodatné odchylky
  • Numpy standardní odchylka FAQ

poté, co řekl, že pokud jste relativně nový Numpy, budete chtít přečíst celý tutoriál.

rychlá recenze Numpy

Začněme s veeeery rychlou revizí Numpy.

Co je Numpy?

Numpy je sada nástrojů pro práci s číselnými daty

Zjednodušeně řečeno, Numpy je sada nástrojů pro práci s číselnými daty.

nejprve má Numpy sadu nástrojů pro vytvoření datové struktury nazvané Numpy array.

můžete si představit Numpy pole jako řádek a sloupec mřížky čísel. Numpy pole mohou být 1-dimenzionální, 2-dimenzionální, nebo dokonce n-dimenzionální.

2D pole vypadá takto:

příklad 2-dimenzionálního NumPy pole s čísly 0 až 7.

pro jednoduchost se v tomto tutoriálu budeme držet polí 1 nebo 2-dimentional.

existuje celá řada způsobů, jak vytvořit různé typy polí s různými druhy čísel. Několik dalších nástrojů pro vytváření Numpy polí patří numpy uspořádat, numpy nuly, numpy ty, numpy dlaždice, a další metody.

bez ohledu na to, jak si vytvořit Numpy pole, na vysoké úrovni, jsou to prostě pole čísel.

Numpy poskytuje nástroje pro manipulaci Numpy polí

Numpy poskytuje nejen nástroje pro vytváření Numpy polí, Numpy také poskytuje nástroje pro práci s Numpy polí.

některé z nejdůležitějších z těchto Numpy nástrojů jsou Numpy funkce pro provádění výpočtů.

K dispozici je celá sada Numpy funkcí pro dělat věci jako:

  • výpočetní technika součet z Numpy array
  • výpočet maximální
  • výpočet exponenciální čísla v poli
  • výpočet hodnoty x na nějakou mocninu, pro každou hodnotu v Numpy array

… a řadu dalších výpočtů.

Numpy směrodatná odchylka je v podstatě hodně jako tyto ostatní Numpy nástroje. Používá se pouze k provedení výpočtu (směrodatná odchylka) skupiny čísel v Numpy poli.

rychlý úvod do Numpy směrodatné odchylky

na velmi vysoké úrovni je směrodatná odchylka měřítkem šíření datové sady. Jedná se zejména o měřítko toho, jak daleko jsou datové body od průměru dat.

podívejme se stručně na základní výpočet.

směrodatná odchylka se vypočítá jako druhá odmocnina rozptylu.

takže pokud máme dataset s N čísla, rozptyl bude:

\begin{equation*} \frac{1}{N} \displaystyle\sum_{i=1}^N (x_i - \overline{x})^2 \end{equation*}

A směrodatná odchylka bude odmocnina z rozptylu:

\begin{equation*} \sqrt{\frac{1}{N} \displaystyle\sum_{i=1}^N (x_i - \overline{x})^2} \end{equation*}

Kde:

x_i = jednotlivé hodnoty v datovém souboru
N = počet hodnot v datovém souboru
\overline{x} = průměr z hodnot x_i

Většinu času, výpočet směrodatné odchylky v ruce, je trochu náročné, protože budete potřebovat pro výpočet průměrné odchylky každý datapoint od průměru, pak čtverec odchylek, atd. Upřímně řečeno, je to trochu únavné.

Pokud však pracujete v Pythonu, můžete pro výpočet použít funkci Numpy směrodatné odchylky.

rychlá poznámka, Pokud jste ve statistice noví

, protože tento blogový příspěvek je o použití numpy.funkce std (), nechci se dostat příliš hluboko do plevele o tom, jak se výpočet provádí ručně. Tento tutoriál je opravdu o tom, jak tuto funkci používáme. Takže pokud potřebujete rychlý přehled o tom, co je směrodatná odchylka, můžete sledovat toto video.

Ok. Po rychlém přezkoumání standardní odchylky se podívejme na syntaxi pro np.std.

syntaxe np.std

syntaxe funkce Numpy směrodatné odchylky je poměrně jednoduchá.

vysvětlím to za sekundu, ale nejprve vám chci říct jednu rychlou poznámku o syntaxi Numpy.

rychlá poznámka: přesná syntaxe závisí na tom, jak importujete Numpy

typicky, když píšeme syntaxi Numpy, používáme alias „np“. To je běžná konvence většiny vědců v oblasti dat.

Chcete-li nastavit tento alias, musíte importovat Numpy takto:

import numpy as np

Pokud se import Numpy s alias, budeme moci zavolat Numpy směrodatná odchylka funkce jako np.std().

Ok, jak již bylo řečeno, podívejme se blíže na syntaxi.

np.syntaxe STD

na vysoké úrovni, syntaxe pro np.std vypadá takto:

obrázek, který vysvětluje syntaxi Numpy směrodatné odchylky.

Jak jsem již zmínil dříve, za předpokladu, že jsme importované Numpy s alias „np“ voláme funkci s syntaxe np.std().

pak uvnitř závorky existuje několik parametrů, které vám umožňují přesně řídit, jak funkce funguje.

pojďme se podívat na tyto parametry.

parametry numpy.std

existuje několik důležitých parametrů, které byste měli vědět:

  • a
  • axis
  • dtype
  • ddof
  • keepdims
  • out

Pojďme se podívat na každý z nich.

a(požadováno)

a parametr určuje pole hodnot, přes které chcete spočítat standardní odchylku.

řekl jinak, to vám umožní zadat vstupní pole k funkci.

vhodné vstupy zahrnují Numpy pole, ale také objekty typu“ array like“, jako jsou seznamy Pythonu.

důležité je, že musíte zadat vstup do tohoto parametru. Je vyžadován vstup.

tento parametr může být implicitní nebo explicitní. Co tím myslím, je, že můžete přímo zadat parametr a=, NEBO můžete nechat parametr z vašeho syntaxe, a jen zadejte název vstupního pole.

ukážu vám příklady v příkladu 1.

axis

parametr osa umožňuje určit osu, podél které bude vypočtena směrodatná odchylka.

abyste tomu porozuměli, musíte pochopit osy.

Numpy pole mají osy.

můžete si představit “ osu “ jako směr podél pole.

v 2rozměrném poli budou 2 osy: osa-0 a osa-1.

ve 2D poli osa – 0 bodů dolů podél řádků a osa-1 bodů vodorovně podél sloupců.

vizuálně si můžete představit osy 2D pole, jako je tento:

vizuální příklad OS NumPy array.

pomocí parametru axis můžete vypočítat směrodatnou odchylku v určitém směru podél pole.

to je nejlépe ilustrováno příklady, takže vám ukážu příklad v příkladu 2.

(úplné vysvětlení OS Numpy array naleznete v našem tutoriálu nazvaném Numpy axes explained.)

dtype

(volitelné)
dtype parametr umožňuje vám určit typ dat, který chcete použít při np.std vypočítá směrodatnou odchylku.

pokud jsou data ve vstupním poli celá čísla, pak bude výchozí hodnota float64.

V opačném případě, pokud jsou data ve vstupním poli plováky, bude toto výchozí pro stejný typ plováku jako vstupní pole.

ddof

(volitelné)
To vám umožní zadat“ stupně volnosti “ pro výpočet.

abyste tomu porozuměli, musíte se znovu podívat na rovnici 2.

\

V této rovnici první člen je \frac{1}{N}.

nezapomeňte: N je počet hodnot v poli nebo datové sadě.

ale pokud uvažujeme statisticky, je ve skutečnosti rozdíl mezi výpočtem směrodatné odchylky populace a směrodatné odchylky vzorku.

pokud vypočítáme směrodatnou odchylku populace, použijeme v naší rovnici výraz \frac{1}{N}.

Nicméně, když jsme se vypočítat směrodatnou odchylku na vzorku dat (vzorek n datapoints), pak musíme upravit rovnici tak, že hlavní termín je \frac{1}{n - 1}. V tom případě rovnice pro vzorek směrodatná odchylka se stane:

\begin{equation*} s_{vzorku} = \sqrt{\frac{1}{n - 1} \displaystyle\sum_{i=1}^N (x_i - \overline{x})^2} \end{equation*}

Jak implementovat toto s np.std?

to můžeme provést pomocí parametru ddof nastavením ddof = 1.

a ve skutečnosti můžeme nastavit výraz ddof obecněji. Když jsme se použít ddof, to bude změnit standardní odchylka výpočtu stát:

\begin{equation*} \sqrt{\frac{1}{n - ddof} \displaystyle\sum_{i=1}^N (x_i - \overline{x})^2} \end{equation*}

Chcete-li být upřímný, je to trochu technické. Pokud se o tom chcete dozvědět více, měli byste se podívat na toto video na Khan academy o stupních volnosti, a populace vs směrodatná odchylka vzorku.

out

(volitelné)
out parametr umožňuje zadat alternativní pole, ve kterém se dát na výstup.

měl by mít stejný tvar jako očekávaný výstup.

keepdims

(volitelné)
keepdims parametr může být použit, aby „držet“ původní počet dimenzí. Když nastavíte keepdims = True, výstup bude mít stejný počet rozměrů jako vstup.

pamatujte: když vypočítáme směrodatnou odchylku, výpočet „zhroutí“ počet dimenzí.

Pokud například zadáme 2rozměrné pole jako vstup, pak ve výchozím nastavení np.std vypíše číslo. Skalární hodnota.

Ale pokud chceme, aby výstup číslo ve 2D pole (tj. výstupní matice se stejnými rozměry jako vstup), pak můžeme nastavit keepdims = True.

abych byl upřímný, některé z těchto parametrů jsou trochu abstraktní a myslím, že s příklady budou mít mnohem větší smysl.

podívejme se na některé příklady.

příklady, jak používat Numpy směrodatnou odchylku

zde budeme pracovat na několika příkladech. Začneme jednoduše a pak zvýšíme složitost.

Příklady:

  • Vypočítat standardní odchylku 1-rozměrné pole
  • Výpočet standardní odchylky 2-rozměrné pole
  • Využití np.std pro výpočet směrodatných odchylek sloupců
  • použijte np.std pro výpočet směrodatných odchylek řádků
  • změňte stupně volnosti
  • použijte parametr keepdims v np.std

nejprve spusťte tento kód

než spustíte některý z příkladů kódu, musíte importovat Numpy.

K tomu, můžete spustit následující kód:

import numpy as np

import Numpy s alias „np„.

příklad 1: Vypočítejte směrodatnou odchylku 1 rozměrového pole

zde začneme jednoduše.

vypočítáme směrodatnou odchylku 1-dimenzionálního Numpy pole.

Vytvořte 1D pole

nejprve vytvoříme naše 1D pole:

array_1d = np.array()
Vypočítejte standardní dev

nyní vypočítáme směrodatnou odchylku těchto čísel.

np.std(array_1d)

OUT:

30.84369195367723

tak co se tady stalo?

NP.funkce std právě vypočítala směrodatnou odchylku čísel pomocí rovnice 2, kterou jsme viděli dříve. Každé číslo je jedním z x_i v této rovnici.

jedna rychlá poznámka

ve výše uvedeném příkladu jsme explicitně nepoužili parametr a=. To proto, že np.std chápe, že když jsme poskytují argument pro funkci, jako v kódu np.std(array_1d), vstup by měl být předán do a parametr.

Případně můžete také explicitně pomocí a= parametry:

np.std(a = array_1d)

:

30.84369195367723

PŘÍKLAD 2: Výpočet směrodatné odchylky z 2-rozměrné pole

na tlačítko Ok. Nyní se podívejme na příklad s 2rozměrným polem.

Vytvořte 2rozměrné pole

zde vytvoříme 2D pole pomocí np.náhodný.randintova funkce.

np.random.seed(22)array_2d = np.random.randint(20, size =(3, 4))

toto pole má 3 řádky a 4 sloupce.

vytiskneme to, abychom to viděli.

print(array_2d)

:

 ]

Tohle je jen 2D pole, které obsahuje 12 náhodných celých čísel mezi 0 a 20.

Vypočítejte směrodatnou odchylku pomocí np.std

Dobře, pojďme vypočítat směrodatnou odchylku.

np.std(array_2d)

OUT:

5.007633062524539

zde, numpy.std() je jen výpočet směrodatné odchylky všech 12 celých čísel.

směrodatná odchylka je 5.007633062524539.

příklad 3: Vypočítejte směrodatnou odchylku sloupců

nyní vypočítáme směrodatnou odchylku sloupců.

k tomu musíme použít parametr axis. (O parametru axis jste se dozvěděli v sekci o parametrech numpy.std)

konkrétně musíme nastavit axis = 0.

proč?

jak jsem již zmínil ve vysvětlení parametru axis, Numpy pole mají osy.

v dvojrozměrném poli je osa-0 osa, která směřuje dolů.

NumPy pole ukazující, že axis = 0 je osa po řádcích pole.

když používáme numpy.std s axis = 0, která vypočítá směrodatné odchylky směrem dolů ve směru osy-0.

pojďme se podívat na příklad, abyste viděli, co tím myslím.

Vytvořte 2rozměrné pole

nejprve vytvoříme 2D pole pomocí np.náhodný.randintova funkce.

(Toto je stejné pole, jaké jsme vytvořili v příkladu 2, takže pokud jste jej již vytvořili,neměli byste jej znovu vytvářet.)

np.random.seed(22)array_2d = np.random.randint(20, size =(3, 4))

pojďme to vytisknout, abychom to mohli vidět.

print(array_2d)

:

 ]

Tohle je jen 2D pole, které obsahuje čísla mezi 0 a 20.

použijte np.std pro výpočet směrodatné odchylky sloupců

nyní nastavíme axis = 0 uvnitř np.std pro výpočet směrodatných odchylek sloupců.

np.std(array_2d, axis = 0)

OUT:

array()
vysvětlení

Co se tady děje?

při použití np.std s axis = 0 Numpy vypočítá směrodatnou odchylku směrem dolů ve směru osy-0. Pamatujte, jak jsem zmínil výše, osa – 0 bodů dolů.

to má za následek výpočet směrodatné odchylky každého sloupce Numpy pole.

obrázek ukazující, jak použít Numpy směrodatnou odchylku s axis = 0 pro výpočet směrodatných odchylek sloupce.

nyní uděláme podobný příklad s řádkovými směrodatnými odchylkami.

příklad 4: Použití np.std pro výpočet směrodatných odchylek řádků

nyní použijeme np.std pro výpočet směrodatných odchylek vodorovně podél 2D numpy pole.

pamatujte, co jsem řekl dříve: numpy pole mají osy. Osy jsou jako směry podél Numpy pole. Ve 2D poli, osa-1 body vodorovně, jako je tento:

obrázek, který ukazuje, jak osa-1 ukazuje vodorovně podél 2D Numpy pole.

Pokud tedy chceme vypočítat standardní odchylky vodorovně, můžeme nastavit axis = 1. To má za následek výpočet směrodatných odchylek řádku.

pojďme se podívat.

Vytvořte 2rozměrné pole

pro spuštění tohoto příkladu budeme opět potřebovat 2D Numpy pole, takže vytvoříme 2D pole pomocí np.náhodný.randintova funkce.

(Toto je stejné pole, jaké jsme vytvořili v příkladu 2, takže pokud jste jej již vytvořili,neměli byste jej znovu vytvářet.)

np.random.seed(22)array_2d = np.random.randint(20, size =(3, 4))

pojďme to vytisknout, abychom to mohli vidět.

print(array_2d)

:

 ]

Tohle je jen 2D pole, které obsahuje čísla mezi 0 a 20.

použijte np.std pro výpočet směrodatné odchylky řádků

nyní použijeme np.std s axis = 1 pro výpočet směrodatných odchylek řádků.

np.std(array_2d, axis = 1)

OUT:

array()
Vysvětlení

Pokud jste pochopili, příklad 3, příklad by měl smysl.

při použití np.std a set axis = 1, Numpy vypočítá směrodatné odchylky vodorovně podél osy-1.

obrázek, který zobrazuje pomocí np.std s osou = 1 pro výpočet směrodatných odchylek řádku.

efektivně, když použijeme Numpy směrodatnou odchylku s axis = 1, funkce vypočítá směrodatnou odchylku řádků.

příklad 5: Změňte stupně volnosti

nyní změníme stupně volnosti.

Zde v tomto příkladu, budeme vytvořit velké pole čísel, vzít vzorek z pole a výpočet směrodatné odchylky na vzorek.

nejprve vytvoříme pole.

Vytvořte Numpy pole

nejprve vytvoříme normálně distribuované Numpy pole s průměrem 0 a směrodatnou odchylkou 10.

k tomu použijeme Numpy náhodnou normální funkci. Všimněte si, že používáme funkci Numpy random seed k nastavení osiva pro generátor náhodných čísel. Další informace o tom naleznete v našem tutoriálu o np.náhodný.símě.

np.random.seed(22)population_array = np.random.normal(size = 100, loc = 0, scale = 10)

Ok. Nyní máme Numpy pole, population_array, které má 100 prvků, které mají průměr 0 a směrodatnou odchylku 10.

vytvořit vzorek

nyní použijeme Numpy random choice k odběru náhodného vzorku z Numpy pole, population_array.

np.random.seed(22)sample_array = np.random.choice(population_array, size = 10)

Toto nové pole, sample_array, je náhodný vzorek 10 prvky z population_array.

použijeme sample_array při výpočtu naší směrodatné odchylky pomocí parametru ddof.

Vypočítejte směrodatnou odchylku vzorku

nyní vypočítáme směrodatnou odchylku vzorku.

Konkrétně, budeme používat Numpy směrodatná odchylka funkce s ddof parametr nastaven na ddof = 1.

np.std(sample_array, ddof = 1)

:

10.703405562234051
Vysvětlení

Tady, jsme vypočítali:

\

A když jsme ddof = 1, rovnice hodnotí se:

\

Aby bylo jasné, při výpočtu standardní odchylky vzorek, budete nastavit ddof = 1.

Chcete-li být upřímný, podrobnosti o tom, proč jsou malá technická (a nad rámec tohoto příspěvku), takže pro více informací o výpočtu výběrové směrodatné odchylky, doporučuji sledovat toto video.

mějte na paměti, že v některých jiných případech můžete nastavit ddof na jiné hodnoty kromě 1 nebo 0. Pokud parametr ddof vůbec nepoužíváte, bude výchozí hodnota 0.

Bez ohledu na to, jakou hodnotu si vyberete, Numpy směrodatná odchylka funkce spočítá směrodatná odchylka s z rovnice:

\

PŘÍKLAD 6: Použití keepdims parametr v np.std

Ok. Nakonec uděláme poslední příklad.

zde nastavíme parametr keepdims na keepdims = True.

Vytvořte 2rozměrné pole

nejprve vytvoříme 2D pole pomocí np.náhodný.randintova funkce.

(Toto je stejné pole, jaké jsme vytvořili v příkladu 2, takže pokud jste jej již vytvořili,neměli byste jej znovu vytvářet.)

np.random.seed(22)array_2d = np.random.randint(20, size =(3, 4))

Pojďme vytisknout:

print(array_2d)

:

 ]
Podívejte se na rozměry

Nyní, pojďme se podívat na rozměry tohoto pole.

array_2d.ndim

:

2

Toto je 2D pole, jak jsme zamýšleli.

Vypočítejte směrodatnou odchylku a zkontrolujte rozměry

Ok. Nyní vypočítáme směrodatnou odchylku a zkontrolujeme rozměry výstupu.

output = np.std(array_2d)

Pojďme rychle vytisknout výstup:

print(output)

:

5.007633062524539

směrodatná odchylka je 5.007633062524539.

jaké jsou rozměry výstupu?

output.ndim

OUT:

0

výstup má 0 rozměrů (je to skalární hodnota).

proč?

Když np.std počítá směrodatnou odchylku, vypočítává souhrnnou statistiku. V tomto případě funkce bere velké množství hodnot a zhroutí je na jednu metriku.

vstup byl tedy 2rozměrný, ale výstup je 0rozměrný.

Co když to chceme změnit?

Co když chceme, aby výstup měl technicky 2-rozměry?

to můžeme udělat pomocí parametru keepdims.

při použití np Zachovejte původní rozměry.std

zde nastavíme keepdims = True, aby výstup měl stejné rozměry jako vstup.

output_2d = np.std(array_2d, keepdims = True)

Nyní, pojďme se podívat na výstupu:

print(output_2d)

:

]

Všimněte si, že výstup, směrodatná odchylka, je stále 5.00763306. Výsledek je však uzavřen uvnitř dvojitých závorek.

pojďme zkontrolovat output_2d a podívejme se blíže.

type(output_2d)

:

numpy.ndarray

, output_2d je Numpy array, ne skalární hodnotu.

Pojďme zkontrolovat rozměry:

output_2d.ndim

:

2

Tento Numpy array, output_2d, má 2 rozměry.

Toto je stejný počet rozměrů jako vstup.

Co se stalo?

když nastavíme keepdims = True, to způsobilo np.funkce std pro vytvoření výstupu se stejným počtem rozměrů jako vstup. I když na výstupu nejsou žádné řádky a sloupce, výstup output_2d má 2 rozměry.

v případě, že budete někdy potřebovat váš výkon mají stejný počet dimenzí, jako váš vstup, můžete nastavit keepdims = True.

(to také funguje, když používáte parametr axis … zkuste to!)

Často kladené otázky o Numpy směrodatná odchylka

Teď, když jste se dozvěděl o Numpy směrodatná odchylka a vidět některé příklady, podívejme se na některé často kladené otázky o np.std.

Často kladené otázky:

  • Proč numpy std() dát jiný výsledek, než matlab std() nebo jiný programovací jazyk?

Otázka 1: Proč numpy std () dává jiný výsledek než matlab std() nebo jiný programovací jazyk?

jednoduchý důvod je, že matlab počítá standardní dev podle následujícího:

\

(Mnoho dalších nástrojů, použít stejnou rovnici.)

Nicméně, Numpy počítá s následujícím:

\

Všimněte si jemného rozdílu mezi \frac{1}{n - 1} vs \frac{1}{N}.

Chcete-li to opravit, můžete použít parametr ddof v Numpy.

Pokud používáte np.std s ddof parametr nastaven na ddof = 1, měli byste dostat stejnou odpověď jako matlab.

nechte své další otázky v komentářích níže

máte další otázky týkající se funkce Numpy směrodatné odchylky?

nechte svůj dotaz v sekci komentáře níže.

Připojte se do našeho kurzu se dozvíte více o Numpy

příklady, které jste viděli v tomto výukovém programu by měla být dost, aby vám začít, ale pokud jste vážně o učení, Numpy, měli byste se zapsat do našeho prémiového kurzu s názvem Numpy Mistrovství.

je toho mnohem více, co se o Numpy dozvíte, a Numpy Mastery vás naučí vše, včetně:

  • Jak vytvořit Numpy pole
  • Jak používat Numpy náhodné funkce
  • Co „Numpy náhodné semínko“ funkce
  • Jak přetvořit, rozdělit a spojit své Numpy pole
  • a další …

kromě toho, bude to pomůže zcela zvládnout syntaxi během několika týdnů. Zjistíte, jak se stát „plynulým“ při psaní Numpy kódu.

Zjistěte více zde:

další informace o Numpy Mastery