Articles

abaterea standard Numpy explained

acest tutorial va explica modul de utilizare a funcției de deviație standard Numpy (AKA, np.std).

la un nivel ridicat, funcția de deviație standard Numpy este simplă. Se calculează deviația standard a valorilor într-o matrice Numpy.

dar detaliile exact cum funcționează funcția sunt puțin complexe și necesită o explicație.

acestea fiind spuse, acest tutorial va explica modul de utilizare a funcției de deviație standard Numpy.

acesta va explica sintaxa np.std (), și vă arată clar, pas-cu-pas exemple de modul în care funcționează funcția.

tutorialul este organizat în secțiuni. Puteți face clic pe oricare dintre următoarele linkuri, care vă vor duce la secțiunea corespunzătoare.

cuprins:

  • o revizuire foarte rapidă a Numpy
  • Introducere în deviația standard Numpy
  • sintaxa np.std
  • Exemple de deviație standard Numpy
  • Întrebări frecvente despre deviația standard Numpy

acestea fiind spuse, dacă sunteți relativ nou la Numpy, poate doriți să citiți întregul tutorial.

o scurtă trecere în revistă a Numpy

Să începem cu o revizuire rapidă veeeery Numpy.

Ce este Numpy?

Numpy este un set de instrumente pentru lucrul cu date numerice

pentru a pune pur și simplu, Numpy este un set de instrumente pentru lucrul cu date numerice.în primul rând, Numpy are un set de instrumente pentru crearea unei structuri de date numită matrice Numpy.

vă puteți gândi la o matrice Numpy ca o grilă rând-și-coloană de numere. Matricele Numpy pot fi 1-dimensionale, 2-dimensionale sau chiar n-dimensionale.

o matrice 2D arată cam așa:

un exemplu de matrice NumPy 2-dimensională cu numerele de la 0 la 7.

de dragul simplității, în acest tutorial, ne vom lipi de matrice 1 sau 2-dimentional.

există o varietate de moduri de a crea diferite tipuri de matrice cu diferite tipuri de numere. Alte câteva instrumente pentru crearea matricelor Numpy includ numpy arrange, numpy zerouri, numpy ones, numpy tile și alte metode.

indiferent de modul în care vă creați matricea Numpy, la un nivel înalt, acestea sunt pur și simplu matrice de numere.

Numpy oferă instrumente pentru manipularea matrice Numpy

Numpy nu numai că oferă instrumente pentru crearea matrice Numpy, Numpy oferă, de asemenea, instrumente pentru lucrul cu matrice Numpy.unele dintre cele mai importante dintre aceste instrumente Numpy sunt funcțiile Numpy pentru efectuarea calculelor.

există un întreg set de funcții Numpy pentru a face lucruri cum ar fi:

  • calculând suma unei matrice Numpy
  • calculând maximul
  • calculând exponențiala numerelor dintr-o matrice
  • calculând valoarea x la o anumită putere, pentru fiecare valoare dintr-o matrice Numpy

… și o varietate de alte calcule.

abaterea standard Numpy este, în esență, foarte mult ca aceste alte instrumente Numpy. Este folosit doar pentru a efectua un calcul (deviația standard) a unui grup de numere într-o matrice Numpy.

o introducere rapidă în deviația standard Numpy

la un nivel foarte ridicat, deviația standard este o măsură a răspândirii unui set de date. În special, este o măsură a cât de departe sunt punctele de date de media datelor.

Să analizăm pe scurt calculul de bază.

deviația Standard este calculată ca rădăcină pătrată a varianței.

deci, dacă avem un set de date cu n numere, varianța va fi:

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

și abaterea standard va fi doar rădăcina pătrată a varianței:

\begin{ecuația*} \sqrt{\frac{1}{n} \displaystyle\sum_{i=1}^n (x_i - \overline{x})^2} \end{ecuația*}

unde:

x_i = valorile individuale din setul de Date
N = numărul de Valori din setul de Date
\overline{x} = media valorilor x_i

de cele mai multe ori, calcularea deviației standard cu mâna este puțin provocatoare, deoarece trebuie să calculați media, abaterile fiecărui punct de date de la medie, apoi pătratul abaterilor etc. Sincer, e cam plictisitor.

cu toate acestea, dacă lucrați în Python, puteți utiliza funcția de deviație standard Numpy pentru a efectua calculul pentru dvs.

o notă rapidă dacă sunteți nou la statistici

deoarece această postare pe blog este despre utilizarea numpy.Funcția std (), nu vreau să intru prea adânc în buruieni despre modul în care calculul este efectuat manual. Acest tutorial este într-adevăr despre modul în care folosim funcția. Deci, dacă aveți nevoie de o revizuire rapidă a deviației standard, puteți viziona acest videoclip.

Ok. După ce am analizat rapid ce este abaterea standard, Să analizăm sintaxa pentru NP.std.

sintaxa lui np.std

sintaxa funcției de deviație standard Numpy este destul de simplă.

o voi explica într-o secundă, dar mai întâi, vreau să vă spun o notă rapidă despre sintaxa Numpy.

o notă rapidă: sintaxa exactă depinde de modul în care importați Numpy

de obicei, atunci când scriem sintaxa Numpy, folosim aliasul „np”. Aceasta este Convenția comună printre cei mai mulți oameni de știință de date.

pentru a seta acel alias, trebuie să importați Numpy astfel:

import numpy as np

dacă importăm Numpy cu acest alias, vom putea apela funcția de deviație standard Numpy canp.std().

Ok, acestea fiind spuse, să aruncăm o privire mai atentă la sintaxă.

np.sintaxa std

la un nivel ridicat, sintaxa pentru np.std arată cam așa:

o imagine care explică sintaxa abaterii standard Numpy.așa cum am menționat mai devreme, presupunând că am importat Numpy cu aliasul ” numim funcția cu sintaxa np.std().

apoi, în interiorul parantezei, există mai mulți parametri care vă permit să controlați exact cum funcționează funcția.

Să aruncăm o privire la acești parametri.

parametrii numpy.std

există câțiva parametri importanți ar trebui să știți:

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

să aruncăm o privire la fiecare dintre ele.

a(obligatoriu)

parametrula specifică matricea de valori peste care doriți să calculați abaterea standard.

a spus diferit, acest lucru vă permite să specificați matrice de intrare la funcția.

intrările corespunzătoare includ matrice Numpy, dar și obiecte „array like”, cum ar fi listele Python.

important, trebuie să furnizați o intrare la acest parametru. Este necesară o intrare.

acestea fiind spuse, parametrul în sine poate fi implicit sau explicit. Ce vreau să spun prin asta, este că puteți introduce direct parametrul a=, sau puteți lăsa parametrul din sintaxa, și doar tastați numele matrice de intrare.

vă voi arăta exemple în acest sens în exemplul 1.

axis

parametrul axă vă permite să specificați o axă de-a lungul căreia va fi calculată deviația standard.

pentru a înțelege acest lucru, trebuie să înțelegeți cu adevărat axele.

matrice Numpy au axe.

vă puteți gândi la o „axă” ca la o direcție de-a lungul matricei.

într-o matrice 2-dimensională, vor exista 2 axe: axa-0 și axa-1.

într-o matrice 2D, axa-0 puncte în jos de-a lungul rândurilor și axa-1 puncte orizontal de-a lungul coloanelor.

vizual, puteți vizualiza axele unei matrice 2D ca aceasta:

un exemplu vizual de axe matrice NumPy.

folosind parametrulaxis, puteți calcula abaterea standard într-o anumită direcție de-a lungul matricei.

Acest lucru este cel mai bine ilustrat cu exemple, așa că vă voi arăta un exemplu în exemplul 2.

(pentru o explicație completă a axelor matrice Numpy, consultați tutorialul nostru numit axe Numpy explicate.)

dtype

(opțional)
parametruldtype vă permite să specificați tipul de date pe care doriți să îl utilizați atunci când np.std calculează deviația standard.

dacă datele din matricea de intrare sunt numere întregi, atunci aceasta va fi implicită lafloat64.

în caz contrar, dacă datele din matricea de intrare sunt plutitoare, atunci aceasta va fi implicită la același tip de flotor ca și matricea de intrare.

ddof

(opțional)
aceasta vă permite să specificați „gradele de libertate” pentru calcul.

pentru a înțelege acest lucru, trebuie să te uiți din nou la ecuația 2.

\

în această ecuație, primul termen este \frac{1}{n}.

amintiți-vă: N este numărul de Valori din matrice sau din setul de date.

dar dacă ne gândim în termeni statistici, există de fapt o diferență între calcularea unei deviații standard a populației și a unei deviații standard a eșantionului.

dacă calculăm o deviație standard a populației, folosim termenul\frac{1}{n} în ecuația noastră.

cu toate acestea, atunci când calculăm deviația standard pe un eșantion de date (un eșantion de n puncte de date), atunci trebuie să modificăm ecuația astfel încât termenul principal să fie \frac{1}{N - 1}. În acest caz, ecuația pentru o abatere standard a eșantionului devine:

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

cum implementăm acest lucru cu NP.std?

putem face acest lucru cu parametrulddof, prin setareaddof = 1.

și, de fapt, putem setaddof termen mai general. Când folosim ddof, va modifica calculul deviației standard pentru a deveni:

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

pentru a fi sincer, acest lucru este un pic tehnic. Dacă trebuie să aflați mai multe despre acest lucru, ar trebui să vizionați acest videoclip la Khan academy despre gradele de libertate și populația vs abaterea standard a eșantionului.

out

(opțional)
parametrulout vă permite să specificați o matrice alternativă în care să puneți ieșirea.

ar trebui să aibă aceeași formă ca și producția așteptată.

keepdims

(opțional)
parametrulkeepdims poate fi folosit pentru a „păstra” numărul original de dimensiuni. Când setați keepdims = True, ieșirea va avea același număr de dimensiuni ca intrarea.

amintiți-vă: când calculăm abaterea standard, calculul va „restrânge” numărul de dimensiuni.

de exemplu, dacă introducem o matrice 2-dimensională ca intrare, atunci în mod implicit, np.std va emite un număr. O valoare scalară.

dar dacă vrem ca ieșirea să fie un număr într-o matrice 2D (adică o matrice de ieșire cu aceleași dimensiuni ca intrarea), atunci putem setakeepdims = True.

pentru a fi sincer, unii dintre acești parametri sunt puțin abstracți și cred că vor avea mult mai mult sens cu exemple.

Să aruncăm o privire la câteva exemple.

Exemple de modul de utilizare a deviației standard Numpy

aici, vom lucra prin câteva exemple. Vom începe simplu și apoi vom crește complexitatea.

Exemple:

  • calculați abaterea standard a unei matrice 1-dimensionale
  • calculați abaterea standard a unei matrice 2-dimensionale
  • utilizați NP.std pentru a calcula abaterile standard ale coloanelor
  • utilizați NP.std pentru a calcula abaterile standard ale rândurilor
  • modificați gradele de libertate
  • utilizați parametrul keepdims în NP.Std

rulați mai întâi acest cod

înainte de a rula oricare dintre exemplele de cod, trebuie să importați Numpy.

pentru a face acest lucru, puteți rula următorul cod:

import numpy as np

acesta va importa Numpy cu aliasul „np„.

Exemplul 1: Calculați deviația standard a unei matrice dimensionale 1

aici, vom începe simplu.

vom calcula deviația standard a matrice Numpy 1-dimensional.

creare matrice 1D

în primul rând, vom crea doar matrice nostru 1D:

array_1d = np.array()
calcula dev standard

acum, vom calcula deviația standard a acestor numere.

np.std(array_1d)

OUT:

30.84369195367723

deci, ce sa întâmplat aici?

np.Funcția std a calculat doar deviația standard a numerelor folosind ecuația 2 pe care am văzut-o mai devreme. Fiecare număr este unul dintre x_i în această ecuație.

O notă rapidă

în exemplul de mai sus, nu am folosit în mod explicita= parametru. Asta pentru că np.std înțelege că atunci când oferim un argument funcției ca în codul np.std(array_1d), intrarea trebuie transmisă parametrului a.

alternativ, puteți utiliza în mod explicita= parametru:

np.std(a = array_1d)

OUT:

30.84369195367723

Exemplul 2: calculați abaterea standard a unei matrice cu 2 dimensiuni

Ok. Acum, să ne uităm la un exemplu cu o matrice 2-dimensională.

creați matrice 2-dimensională

aici, vom crea o matrice 2D, folosind np.aleator.funcția randint.

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

această matrice are 3 rânduri și 4 coloane.

să-l tipărim, ca să-l putem vedea.

print(array_2d)

OUT:

 ]

aceasta este doar o matrice 2D care conține 12 numere întregi aleatorii între 0 și 20.

calculați deviația standard cu np.std

bine, să calculăm deviația standard.

np.std(array_2d)

OUT:

5.007633062524539

aici, numpy.std() este doar calculul deviației standard a tuturor celor 12 numere întregi.

deviația standard este5.007633062524539.

Exemplul 3: Calculați abaterea standard a coloanelor

acum, vom calcula abaterea standard a coloanelor.

pentru a face acest lucru, trebuie să folosim parametrul axis. (Ați aflat despre parametrul axis din secțiunea despre parametrii numpy.std)

Mai exact, trebuie să setămaxis = 0.

de ce?

după cum am menționat în explicația parametruluiaxis anterior, matricele Numpy au axe.

într-o matrice bidimensională, axa-0 este axa care indică în jos.

o matrice NumPy care arată că axa = 0 este axa în jos rândurile de matrice.

când folosim numpy.std cu axis = 0, care va calcula abaterile standard în jos în direcția axei-0.

Să aruncăm o privire la un exemplu, astfel încât să puteți vedea ce vreau să spun.

creare matrice 2-dimensională

în primul rând, vom crea o matrice 2D, folosind np.aleator.funcția randint.

(aceasta este aceeași matrice pe care am creat-o în exemplul 2, deci dacă ați creat-o deja, nu ar trebui să o creați din nou.)

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

să-l imprimați, astfel încât să putem vedea.

print(array_2d)

OUT:

 ]

aceasta este doar o matrice 2D care conține numere întregi între 0 și 20.

utilizați np.std pentru a calcula deviația standard a coloanelor

acum, vom setaaxis = 0 în interiorul np.std pentru a calcula abaterile standard ale coloanelor.

np.std(array_2d, axis = 0)

OUT:

array()
explicație

Ce se întâmplă aici?

când folosim np.std cu axis = 0, Numpy va calcula deviația standard în jos în direcția axei-0. Amintiți-vă, așa cum am menționat mai sus, axa-0 puncte în jos.

Acest lucru are ca efect calcularea deviației standard a fiecărei coloane a matricei Numpy.

o imagine care arată cum se utilizează abaterea standard Numpy cu axă = 0 pentru a calcula abaterile standard ale coloanei.

acum, să facem un exemplu similar cu abaterile standard de rând.

Exemplul 4: Utilizați np.std pentru a calcula abaterile standard ale rândurilor

acum, vom folosi np.std pentru a calcula abaterile standard orizontal de-a lungul unei matrice numpy 2D.

amintiți-vă ce am spus mai devreme: matrice numpy au axe. Axele sunt ca direcțiile de-a lungul matricei Numpy. Într-o matrice 2D, axa-1 puncte orizontal, astfel:

o imagine care arată modul în care AXA-1 puncte orizontal de-a lungul unei matrice Numpy 2D.

deci, dacă vrem să calculăm abaterile standard pe orizontală, putem setaaxis = 1. Acest lucru are ca efect calcularea abaterilor standard de rând.

Să aruncăm o privire.

creare matrice 2-dimensională

pentru a rula acest exemplu, vom avea din nou nevoie de o matrice Numpy 2D, așa că vom crea o matrice 2D folosind np.aleator.funcția randint.

(aceasta este aceeași matrice pe care am creat-o în exemplul 2, deci dacă ați creat-o deja, nu ar trebui să o creați din nou.)

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

să-l imprimați, astfel încât să putem vedea.

print(array_2d)

OUT:

 ]

aceasta este doar o matrice 2D care conține numere întregi între 0 și 20.

utilizați np.std pentru a calcula deviația standard a rândurilor

acum, vom folosi np.std cuaxis = 1 pentru a calcula abaterile standard ale rândurilor.

np.std(array_2d, axis = 1)

OUT:

array()
explicație

Dacă ați înțeles Exemplul 3, acest nou exemplu ar trebui să aibă sens.

când folosim np.std și setațiaxis = 1, Numpy va calcula abaterile standard orizontal de-a lungul axei-1.

o imagine care arată folosind np.std cu axa = 1 pentru a calcula abaterile standard rând.

în mod eficient, atunci când folosim deviația standard Numpy cuaxis = 1, funcția calculează deviația standard a rândurilor.

exemplul 5: Schimbați gradele de libertate

acum, să schimbăm gradele de libertate.

aici, în acest exemplu, vom crea o gamă largă de numere, vom lua un eșantion din acea matrice și vom calcula abaterea standard pe acel eșantion.

În primul rând, să creăm matricele noastre.

creare matrice Numpy

în primul rând, vom crea doar o matrice Numpy distribuită în mod normal, cu o medie de 0 și o abatere standard de 10.

pentru a face acest lucru, vom folosi funcția normală aleatorie Numpy. Rețineți că folosim funcția NumPy random seed pentru a seta semințele pentru generatorul de numere aleatorii. Pentru mai multe informații despre acest lucru, citiți tutorialul nostru despre np.aleator.semințe.

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

Ok. Acum avem o matrice Numpy,population_array, care are 100 de elemente care au o medie de 0 și o abatere standard de 10.

creare eșantion

acum, vom folosi alegerea aleatorie Numpy pentru a lua o probă aleatorie din matricea Numpy,population_array.

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

această nouă matrice,sample_array, este un eșantion aleatoriu de 10 elemente dinpopulation_array.

vom folosisample_array când vom calcula deviația standard folosind parametrulddof.

calculați abaterea standard a eșantionului

acum, vom calcula abaterea standard a eșantionului.

în mod specific, vom folosi funcția de deviație standard Numpy cu parametrulddof setat laddof = 1.

np.std(sample_array, ddof = 1)

OUT:

10.703405562234051
explicație

aici, am calculat:

\

și când setăm ddof = 1, ecuația se evaluează la:

\

pentru a fi clar, atunci când calculați abaterea standard a unui eșantion, veți seta ddof = 1.

pentru a fi sincer, detaliile despre motivul pentru care sunt puțin tehnice (și dincolo de domeniul de aplicare al acestui post), deci pentru mai multe informații despre calcularea unei deviații standard a eșantionului, vă recomand să vizionați acest videoclip.

rețineți că, pentru alte cazuri, puteți setaddof la alte valori în afară de 1 sau 0. Dacă nu utilizați parametrul ddof, acesta va fi implicit la 0.

indiferent de valoarea selectată, funcția de deviație standard Numpy va calcula deviația standard cu ecuația:

\

exemplul 6: utilizați parametrul keepdims în np.std

Ok. În cele din urmă, vom face un ultim exemplu.

aici, vom seta parametrulkeepdims lakeepdims = True.

creare matrice 2-dimensională

în primul rând, vom crea o matrice 2D, folosind np.aleator.funcția randint.

(aceasta este aceeași matrice pe care am creat-o în exemplul 2, deci dacă ați creat-o deja, nu ar trebui să o creați din nou.)

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

să-l tipărim:

print(array_2d)

OUT:

 ]
verificați dimensiunile

acum, să aruncăm o privire la dimensiunile acestei matrice.

array_2d.ndim

OUT:

2

aceasta este o matrice 2D, la fel cum ne-am propus.

calculați deviația standard și verificați dimensiunile

Ok. Acum, vom calcula deviația standard și vom verifica dimensiunile ieșirii.

output = np.std(array_2d)

să imprimăm rapid ieșirea:

print(output)

OUT:

5.007633062524539

deci abaterea standard este 5.007633062524539.

acum, care sunt dimensiunile ieșirii?

output.ndim

OUT:

0

ieșirea are 0 dimensiuni (este o valoare scalară).

de ce?

când np.std calculează deviația standard, este de calcul o statistică sumară. În acest caz, funcția ia un număr mare de valori și le restrânge la o singură metrică.

deci intrarea a fost 2-dimensională, dar ieșirea este 0-dimensională.

Ce se întâmplă dacă vrem să schimbăm asta?

Ce se întâmplă dacă vrem ca ieșirea să aibă tehnic 2 dimensiuni?

putem face asta cu parametrulkeepdims.

păstrați dimensiunile originale atunci când folosim np.std

aici, vom setakeepdims = True pentru a face ieșirea aceleași dimensiuni ca și intrarea.

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

acum, să ne uităm la ieșire:

print(output_2d)

OUT:

]

observați că ieșirea, abaterea standard, este încă 5.00763306. Dar rezultatul este închis în interiorul parantezelor duble.

să inspectămoutput_2d și să aruncăm o privire mai atentă.

type(output_2d)

OUT:

numpy.ndarray

deci,output_2d este o matrice Numpy, nu o valoare scalară.

să verificăm dimensiunile:

output_2d.ndim

OUT:

2

această matrice Numpy,output_2d, are 2 dimensiuni.

acesta este același număr de dimensiuni ca intrarea.

ce s-a întâmplat?

când am setatkeepdims = True, care a cauzat np.Funcția std pentru a produce o ieșire cu același număr de dimensiuni ca intrarea. Chiar dacă nu există rânduri și coloane în ieșire, ieșirea output_2d are 2 dimensiuni.

Deci, în cazul în care aveți nevoie vreodată de ieșire pentru a avea același număr de dimensiuni ca intrare, puteți setakeepdims = True.

(Acest lucru funcționează și atunci când utilizați parametrulaxis … încercați!)

Întrebări frecvente despre abaterea standard Numpy

acum că ați aflat despre abaterea standard Numpy și ați văzut câteva exemple, să trecem în revistă câteva întrebări frecvente despre np.std.

Întrebări frecvente:

  • De ce numpy std() dă un rezultat diferit de matlab std() sau un alt limbaj de programare?

Întrebarea 1: De ce numpy std() dă un rezultat diferit de matlab std() sau un alt limbaj de programare?

simplul motiv este că matlab calculează dev standard în conformitate cu următoarele:

\

(multe alte instrumente folosesc aceeași ecuație.)

cu toate acestea, Numpy calculează cu următoarele:

\

observați diferența subtilă dintre \frac{1}{N - 1} vs \frac{1}{n}.

pentru a remedia acest lucru, puteți utiliza parametrul ddof în Numpy.

dacă utilizați np.std cu parametrulddof setat laddof = 1, ar trebui să obțineți același răspuns ca matlab.

lăsați celelalte întrebări în comentariile de mai jos

aveți alte întrebări despre funcția de abatere standard Numpy?

lăsați întrebarea dvs. în secțiunea de comentarii de mai jos.

Alăturați-vă cursului nostru pentru a afla mai multe despre Numpy

exemplele pe care le-ați văzut în acest tutorial ar trebui să fie suficiente pentru a vă începe, dar dacă sunteți serios în ceea ce privește învățarea Numpy, ar trebui să vă înscrieți la cursul nostru premium numit Numpy Mastery.

există mult mai multe de învățat despre Numpy, iar Numpy Mastery vă va învăța totul, inclusiv:

  • cum se creează matrice Numpy
  • cum se utilizează funcțiile aleatoare Numpy
  • ce funcția „semințe aleatoare Numpy” face
  • cum să remodelați, să împărțiți și să combinați matricele Numpy
  • și multe altele …

Mai mult, vă va ajuta să stăpâniți complet sintaxa în câteva săptămâni. Veți descoperi cum să deveniți „fluent” în scrierea codului Numpy.

Aflați mai multe aici:

Aflați mai multe despre Numpy Mastery