Acest tutorial vă va arăta cum să utilizați funcția NumPy max, pe care o veți vedea în codul Python ca np.max.

La un nivel înalt, vreau să explic funcția și să vă arăt cum funcționează. Așa stând lucrurile, există două secțiuni principale în acest tutorial: sintaxa funcției NumPy max și exemple de utilizare a NumPy max.

Dacă sunteți încă la început cu NumPy, vă recomand să citiți întregul tutorial, de la început până la sfârșit. Acestea fiind spuse, dacă doriți doar să obțineți un răspuns rapid la o întrebare, puteți sări la secțiunea corespunzătoare cu unul dintre următoarele link-uri:

  • Sintaxa NumPy max
  • Exemple de utilizare a NumPy max

Ok. Cu toate acestea în minte, să începem.

În primul rând, haideți să vorbim despre NumPy și despre funcția NumPy max.

O scurtă introducere în funcția NumPy max

Este probabil clar pentru dumneavoastră că funcția NumPy max este o funcție din modulul NumPy.

Dar dacă sunteți un adevărat începător, s-ar putea să nu știți cu adevărat ce este NumPy. Deci, înainte de a vorbi despre funcția np.max în mod specific, să vorbim rapid despre NumPy.

Ce este mai exact NumPy?

Numpy este un modul de manipulare a datelor pentru Python

Pentru a spune foarte simplu, NumPy este un pachet de manipulare a datelor pentru limbajul de programare Python.

Dacă sunteți interesat de știința datelor în Python, NumPy este foarte important. Acest lucru se datorează faptului că o mare parte din munca de știință a datelor este pur și simplu manipularea datelor. Fie că faceți învățare profundă sau analiză de date, o cantitate uriașă de muncă în știința datelor este doar curățarea datelor, pregătirea datelor și explorarea lor pentru a vă asigura că sunt bune de utilizat.

Din nou, datorită importanței manipulării datelor, NumPy este foarte important pentru știința datelor în Python.

Numpy este un set de instrumente pentru lucrul cu date numerice

Specific însă, NumPy oferă un set de instrumente pentru lucrul cu date numerice.

Python are alte seturi de instrumente pentru lucrul cu date nenumerice și date de tip mixt (cum ar fi modulul Pandas). Dar dacă aveți orice fel de date numerice pe care trebuie să le curățați, să le modificați, să le remodelați sau să le analizați, NumPy este probabil setul de instrumente de care aveți nevoie.

Deși funcțiile NumPy pot opera pe o varietate de structuri de date, ele sunt construite pentru a opera pe o structură numită matrice NumPy. Tablourile NumPy sunt doar un tip special de obiecte Python care conțin date numerice. Există o varietate de moduri de a crea array-uri numpy, inclusiv funcția np.array, funcția np.ones, funcția np.zeros și funcția np.arange, împreună cu multe alte funcții acoperite în tutoriale anterioare aici, la Sharp Sight.

Important, array-urile NumPy sunt optimizate pentru calculele numerice. Astfel, există un set de instrumente în NumPy pentru a efectua calcule numerice pe array-urile NumPy, cum ar fi calcularea mediei unui array NumPy, calcularea medianei unui array NumPy și așa mai departe.

În esență, NumPy vă oferă un set de instrumente pentru a crea array-uri de date numerice și pentru a efectua calcule pe aceste date numerice.

Unul dintre calculele pe care le puteți efectua este calcularea valorii maxime a unui array NumPy. Aici intervine funcția np.max.

NumPy max calculează valoarea maximă a valorilor dintr-un tablou NumPy

Funcția numpy.max() calculează valoarea maximă a valorilor numerice conținute într-un tablou NumPy. De asemenea, poate calcula valoarea maximă a rândurilor, coloanelor sau a altor axe. Vom vorbi despre asta în secțiunea de exemple.

Sintactic, veți vedea adesea funcția NumPy max în cod ca np.max. O veți vedea scrisă astfel atunci când programatorul a importat modulul NumPy cu aliasul np.

În plus, doar pentru a clarifica, ar trebui să știți că funcția np.max este același lucru cu funcția NumPy amax, AKA np.amax. În esență, np.max este un alias al lui np.amax. În afară de nume, ele sunt identice.

Un exemplu de nivel înalt al modului în care funcționează np.max

Mai târziu în acest tutorial, vă voi arăta exemple concrete de utilizare a funcției np.max, dar chiar aici vreau să vă dau o idee aproximativă a ceea ce face aceasta.

De exemplu, să presupunem că aveți un array NumPy 1-dimensional cu cinci valori:

Un exemplu vizual al unui array numpy pe care îl vom folosi cu numpy max

Potem folosi funcția NumPy max pentru a calcula valoarea maximă:

O reprezentare vizuală a modului în care NumPy max calculează media unui array NumPy.

Deși acest exemplu vă arată modul în care funcția np.max() operează pe un array NumPy unidimensional, aceasta operează într-un mod similar pe array-uri bidimensionale și pe array-uri multidimensionale. Din nou, vă voi arăta exemple complete ale acestora în secțiunea de exemple a acestui tutorial.

Înainte de a ne uita la exemplele de cod, totuși, să aruncăm o privire rapidă asupra sintaxei și parametrilor funcției np.max.

Sintaxa funcției numpy max

Sintaxa funcției np.max este destul de simplă, deși câțiva dintre parametrii funcției pot fi puțin confuzi.

Aici, vom vorbi despre structura sintactică a funcției și voi explica, de asemenea, parametrii importanți.

O scurtă notă

O scurtă notă înainte de a începe să analizăm sintaxa.

Sintactic, numele propriu al funcției este numpy.max().

După ce am spus asta, veți vedea adesea funcția în cod ca np.max().

De ce?

De obicei, la începutul unui program care utilizează modulul NumPy, programatorii vor importa funcția NumPy ca np. Veți vedea literalmente o linie de cod în program care va suna import numpy as np. Practic, acest lucru importă modulul NumPy cu aliasul np. Acest lucru îi permite programatorului să se refere la NumPy ca np în cod, ceea ce îi permite să se refere la funcția numpy.max ca np.max.

După ce am spus acest lucru, să aruncăm o privire mai atentă la sintaxă.

O explicație a sintaxei

La un nivel înalt, sintaxa funcției np.max este destul de simplă.

Există numele funcției – np.max() – și, în interiorul funcției, există mai mulți parametri care ne permit să controlăm comportamentul exact al funcției.

O explicație a sintaxei funcției NumPy max.

Să aruncăm o privire mai atentă la parametrii lui np.max, deoarece parametrii sunt cei care vă oferă cu adevărat un control fin al funcției.

Parametrii lui np.max

Parametrii lui numpy.max are patru parametri principali:

  • a
  • axis
  • out
  • keepdims

Să vorbim despre fiecare dintre acești parametri în parte.

a (obligatoriu)

Parametrul a vă permite să specificați datele pe care va opera funcția np.max. În esență, acesta specifică matricea de intrare a funcției.

În multe cazuri, această matrice de intrare va fi o matrice NumPy corespunzătoare. Acestea fiind spuse, numpy.max (și majoritatea celorlalte funcții NumPy) va opera pe orice „secvență de date asemănătoare unui array”. Aceasta înseamnă că argumentul la parametrul a poate fi o listă Python, o tupla Python sau una dintre alte câteva secvențe Python.

Rețineți că trebuie să furnizați ceva la acest argument. Este obligatoriu.

axis (opțional)

Parametrul axis vă permite să specificați axa pe care veți calcula valorile maxime.

Dispus mai simplu, parametrul axis vă permite să calculați maximele de rând și maximele de coloană.

Voi explica cum se face acest lucru cu mai multe detalii în secțiunea de exemple de mai jos, dar permiteți-mi să vă explic rapid cum funcționează parametrul axis.

O scurtă trecere în revistă a axelor tablourilor

La un nivel înalt, trebuie să înțelegeți că tablourile NumPy au axe.

Axele sunt ca niște direcții de-a lungul tabloului NumPy. Într-un array bidimensional, axa 0 este axa care punctează în josul rândurilor și axa 1 este axa care punctează orizontal peste coloane.

O explicație vizuală a axelor array-urilor NumPy.

Parametrul array specifică axa pentru a calcula maximele

Și cum se leagă aceasta de parametrul axis?

Când folosim parametrul axis în funcția numpy.max, specificăm axa de-a lungul căreia să găsim maximele.

Aceasta ne permite efectiv să calculăm maximele de coloană și maximele de rând.

Dă-mi voie să-ți arăt ce vreau să spun.

Amintește-ți că axa 0 este axa care indică în jos, în josul rândurilor.

Când folosim codul np.max(axis = 0) pe o matrice, îi spunem efectiv lui NumPy să calculeze valorile maxime în acea direcție … direcția axei 0.

Un exemplu de utilizare a lui np.max cu axa = 0.

Efectiv, atunci când setăm axis = 0, specificăm că dorim să calculăm maximele coloanelor.

În mod similar, amintiți-vă că într-o matrice bidimensională, axa 1 indică orizontal. Prin urmare, atunci când folosim NumPy max cu axis = 1, îi spunem lui NumPy să calculeze maximele pe orizontală, în direcția axei 1.

Un exemplu de utilizare a np.max cu axa = 1.

Aceasta calculează efectiv maximele rândurilor.

Voi arăta exemple concrete de cod despre cum se face acest lucru, mai târziu în secțiunea exemple.

Rețineți că parametrul axis este opțional. Dacă nu specificați o axă, NumPy max va găsi valoarea maximă din întreaga matrice NumPy.

out (opțional)

Parametrul out vă permite să specificați o matrice de ieșire specială în care puteți stoca rezultatul lui np.max.

Nu este obișnuit să folosiți acest parametru (mai ales dacă sunteți începător), așa că nu vom discuta acest aspect în tutorial.

out este un parametru opțional.

keepdims (opțional)

Parametrul keepdims este puțin confuz, așa că va fi nevoie de un mic efort pentru a-l înțelege.

În cele din urmă, parametrul keepdims păstrează dimensiunile de ieșire la fel ca și dimensiunile de intrare.

Pentru a înțelege de ce acest lucru ar putea fi necesar, să aruncăm o privire la modul în care funcționează de obicei funcția numpy.max.

Când folosiți np.max pe un array NumPy tipic, funcția reduce numărul de dimensiuni. Ea rezumă datele.

De exemplu, să spunem că aveți un array NumPy cu 1 dimensiune. Folosiți NumPy max pe array.

Când folosiți np.max pe un array 1-d, rezultatul va fi un singur număr. O valoare scalară … nu un array 1-d.

Un exemplu vizual al modului în care np.max rezumă un array 1-d la un singur număr, prin calcularea valorii MAX.

În esență, funcțiile precum NumPy max (precum și numpy.median, numpy.mean, etc.) rezumă datele, iar în rezumarea datelor, aceste funcții produc ieșiri care au un număr redus de dimensiuni.

Câteodată însă, doriți ca ieșirea să aibă același număr de dimensiuni. Există momente în care, dacă intrarea este o matrice 1-d, doriți ca ieșirea să fie o matrice 1-d (chiar dacă matricea de ieșire are o singură valoare în ea).

Puteți face acest lucru parametrul keepdims.

În mod implicit, keepdims este setat la False. Deci, în mod implicit (așa cum s-a discutat mai sus), dimensiunile de ieșire nu vor fi aceleași cu cele de intrare. În mod implicit, dimensiunile ieșirii vor fi mai mici (deoarece np.max rezumă datele).

Dar dacă setați keepdims = True, ieșirea va avea aceleași dimensiuni ca și intrarea.

Acest lucru este puțin abstract fără un exemplu concret, așa că vă voi arăta un exemplu al acestui comportament mai târziu, în secțiunea de exemple.

Și, de fapt, acum că am trecut în revistă parametrii, acesta este un loc bun pentru a începe să ne uităm la exemplele de NumPy max.

Exemple: cum se utilizează funcția numpy max

În această secțiune, vă voi arăta exemple concrete de utilizare a funcției NumPy max.

Voi arăta mai multe variante pentru a găsi valoarea maximă a unui array. Vă voi arăta cum să găsiți valoarea maximă a unui array 1-d, cum să găsiți valoarea maximă a unui array 2-d și cum să lucrați cu mai mulți dintre parametrii importanți ai funcției numpy.max.

Executați mai întâi acest cod

Înainte de a începe, există câteva lucruri preliminare pe care trebuie să le faceți pentru a fi configurați corespunzător.

În primul rând, trebuie să aveți NumPy instalat corect pe computerul dumneavoastră.

Import numpy

În al doilea rând, trebuie să aveți NumPy importat în mediul dumneavoastră de lucru.

Puteți importa NumPy cu următorul cod:

import numpy as np

Rețineți că am importat NumPy ca np. Asta înseamnă că ne vom referi la NumPy în codul nostru cu aliasul np.

Bine, acum că am terminat, să ne uităm la câteva exemple.

Calculează maximul unei matrice unidimensionale

Vom începe simplu.

Aici, vom calcula valoarea maximă a unui array NumPy 1-d.

Pentru a face acest lucru, vom crea mai întâi un array 1-dimensional care conține câteva numere întregi aleatorii. Pentru a crea acest array, vom folosi funcția numpy.random.randint(). Rețineți că trebuie să folosiți funcția np.random.seed() pentru ca array-ul NumPy să conțină aceleași numere întregi ca și numerele întregi din acest exemplu.

np.random.seed(22)np_array_1d = np.random.randint(size = 5, low = 0, high = 99)

Această sintaxă va crea un array 1-d numit np_array_1d.

Putem imprima np_array_1d folosind funcția print().

print(np_array_1d)

Și iată rezultatul:


Vizual, putem identifica valoarea maximă, care este 84.

Dar haideți să facem acest lucru cu puțin cod.

Aici, vom calcula valoarea maximă a matricei noastre NumPy folosind funcția np.max().

np.max(np_array_1d)

Care produce următoarea ieșire:

84

Este un exemplu extrem de simplu, dar care ilustrează tehnica. Evident, atunci când matricea are doar 5 elemente, puteți inspecta vizual matricea și găsi valoarea maximă. Dar această tehnică va funcționa dacă aveți un array cu mii de valori (sau mai multe!).

Calculează maximul unui array 2-d

În continuare, haideți să calculăm maximul unui array 2-d.

Pentru a face acest lucru, evident că avem nevoie de un array 2-d cu care să lucrăm, așa că vom crea mai întâi un array NumPy bidimensional.

Pentru a crea array-ul nostru 2-d, vom folosi funcția np.random.choice(). În esență, această funcție va extrage un eșantion aleatoriu din numere întregi între 0 și 8, fără înlocuire. După ce np.random.choice() este executată, vom folosi metoda reshape() pentru a remodela numerele întregi într-o matrice bidimensională cu 3 rânduri și 3 coloane.

np.random.seed(1)np_array_2d = np.random.choice(9, 9, replace = False).reshape((3,3))

Să aruncăm o privire prin tipărirea tabloului, np_array_2d.

print(np_array_2d)
 ]

După cum puteți vedea, acesta este un tablou 2-d cu 3 rânduri și 3 coloane. Acesta conține numere întregi de la 0 la 8, aranjate aleatoriu în matrice.

Acum, haideți să calculăm valoarea maximă a tabloului:

np.max(np_array_2d)

Ceea ce produce următoarea ieșire:

8

Din nou, acesta este un exemplu foarte simplu, dar îl puteți folosi cu un tablou 2-d mult mai mare și va funcționa în același mod. Odată ce ați învățat cum să folosiți această tehnică, încercați-o cu array-uri mai mari!

În continuare, să facem ceva mai complicat.

… în următoarele exemple, vom calcula maximele coloanelor și maximele rândurilor.

Calculează valoarea maximă a coloanelor unui array 2-d

În primul rând: vom calcula valorile maxime ale coloanelor unui array.

Pentru a face acest lucru, trebuie să folosim parametrul axis. În mod specific, trebuie să setăm axis = 0 în interiorul funcției numpy.max.

Să trecem rapid în revistă de ce.

Parametrul axis specifică ce axă doriți să rezumați

Amintiți-vă că array-urile NumPy au axe și că axele sunt ca niște direcții de-a lungul array-ului. Într-un array 2-d, axa 0 este axa care indică în jos, iar axa 1 este axa care indică pe orizontală.

O explicație vizuală a axelor array-urilor NumPy.

Potem folosi aceste axe pentru a defini direcția de-a lungul căreia să folosim np.max.

Să spunem deci că vrem să calculăm valorile maxime ale coloanelor. Acest lucru este echivalent cu calcularea mediilor în jos.

În esență, pentru a calcula maximele coloanelor, trebuie să calculăm maximele în direcția axei-0.

Calculează max cu axa = 0

Lasă-mă să-ți arăt cum.

Aici, vom recrea matricea noastră NumPy 2-d. Acesta este același ca și array-ul NumPy 2-d pe care l-am creat într-un exemplu anterior, așa că, dacă ați rulat deja acel cod, nu este nevoie să îl rulați din nou.

np.random.seed(1)np_array_2d = np.random.choice(9, 9, replace = False).reshape((3,3))

Și îl putem imprima:

print(np_array_2d)
 ]

Încă o dată, acesta este un array 2-d cu 3 rânduri și 3 coloane. Acesta conține numere întregi de la 0 la 8, aranjate aleatoriu în tablou.

Acum, să calculăm maximele coloanelor folosind numpy.max cu axis = 0.

# CALCULATE COLUMN MAXIMAnp.max(np_array_2d, axis = 0)

Ceea ce produce următorul tablou de ieșire:

array()

Să evaluăm ce s-a întâmplat aici.

Prin setarea axis = 0, am specificat că dorim ca funcția NumPy max să calculeze valorile maxime în jos de-a lungul axei 0.

Când setăm axis = 0, numpy.max calculează valorile maxime ale coloanelor.

Este destul de simplu atâta timp cât înțelegeți axele NumPy și modul în care acestea lucrează în funcțiile NumPy.

Calculează maximul rândului cu axis = 1

În mod similar, putem calcula maximele rândurilor prin setarea parametrului axis la axis = 1.

Iată codul pentru a crea din nou setul de date 2-d:

np.random.seed(1)np_array_2d = np.random.choice(9, 9, replace = False).reshape((3,3))
print(np_array_2d)
 ]

Și acum să calculăm maximele rândurilor:

np.max(np_array_2d, axis = 1)

Cu următoarea ieșire:

array()

Acest lucru ar trebui să aibă sens dacă ați citit și înțeles deja exemplele anterioare.

Când setăm axis = 1, îi spunem lui numpy.max să calculeze valorile maxime în direcția axei-1. Deoarece axa 1 este axa care se desfășoară orizontal de-a lungul matricei, acest lucru calculează efectiv valorile maxime de-a lungul rândurilor unei matrice 2-d:

Când setăm axis = 1, numpy.max calculează valorile maxime ale rândurilor.

Încă o dată, acest lucru este destul de simplu, atâta timp cât înțelegeți cu adevărat axele matricei NumPy. Dacă aveți în continuare probleme în a înțelege axele, vă recomand să revedeți tutorialul nostru despre axele array-urilor NumPy.

Cum se utilizează parametrul keepdims cu np.max

În cele din urmă, să aruncăm o privire la parametrul keepdims.

Înainte de a face acest lucru, permiteți-mi să vă explic de ce avem nevoie de el.

Așa cum am observat mai devreme, funcția NumPy max rezumă datele atunci când o folosiți. De fapt, multe dintre funcțiile NumPy care calculează statistici de sinteză (cum ar fi np.mean, np.median, np.min, etc.) rezumă datele prin însăși natura lor. Atunci când calculați o statistică sumară, prin definiție rezumați datele.

Acest lucru are consecințe importante legate de dimensiunile datelor.

Când rezumați datele cu o funcție precum numpy.max, rezultatul funcției va avea un număr redus de dimensiuni.

De exemplu, să spunem că calculați valoarea maximă a unui array bidimensional. Dacă utilizați numpy.max pe acest array bidimensional (fără parametrul axis), atunci ieșirea va fi un singur număr, un scalar. Scalarii au dimensiuni zero. Două dimensiuni la intrare, zero dimensiuni la ieșire.

Funcția NumPy max reduce efectiv dimensiunile între intrare și ieșire.

Câteodată însă, nu doriți un număr redus de dimensiuni. Pot exista situații în care aveți nevoie ca ieșirea să aibă, din punct de vedere tehnic, aceleași dimensiuni ca și intrarea (chiar dacă ieșirea este un singur număr).

Puteți forța acest comportament prin utilizarea parametrului keepdims.

Setați keepdims egal cu true (și păstrați aceleași dimensiuni)

În mod implicit, parametrul keepdims este setat la False. După cum tocmai am explicat, acest lucru înseamnă că ieșirea nu trebuie să aibă aceleași dimensiuni ca și intrarea, în mod implicit.

Dar dacă setați keepdims = True, acest lucru va forța ieșirea să aibă același număr de dimensiuni ca și intrarea.

Acest lucru ar putea să vă încurce, așa că haideți să ne uităm la un exemplu solid.

Primul rând, să creăm o matrice 2-d.

Aceasta este aceeași matrice pe care am creat-o mai devreme, așa că, dacă ați rulat deja acest cod, nu este nevoie să îl rulați din nou. În esență, acest cod creează o matrice 2-d cu numerele de la 0 la 8, aranjate aleatoriu într-o matrice de 3 pe 3.

np.random.seed(1)np_array_2d = np.random.choice(9, 9, replace = False).reshape((3,3))

Doar de dragul clarității, să aruncăm o privire prin tipărire:

print(np_array_2d)

Și iată și array-ul:

 ]

Din nou, acest array conține doar numerele întregi de la 0 la 8, aranjate aleatoriu într-un array NumPy 3 câte 3.

Și câte dimensiuni are?

Probabil că este evident pentru dumneavoastră, dar putem prelua direct numărul de dimensiuni prin extragerea atributului ndim din tablou.

np_array_2d.ndim

Și acest lucru ne spune numărul de dimensiuni:

2

Acum, np_array_2d este un tablou bidimensional.

Acum, să folosim np.max pentru a calcula valoarea maximă a array-ului.

np.max(np_array_2d)

Valoarea maximă este 8.

Și câte dimensiuni are ieșirea? Putem verifica făcând referire la atributul ndim de la sfârșitul funcției np.max():

np.max(np_array_2d).ndim

Câte dimensiuni are ieșirea?

0.

Salida lui np.max este valoarea maximă (8), care este un scalar. Acest scalar are zero dimensiuni.

Reexecutați np.max cu keepdims = True

Acum, să reluăm codul cu keepdims = True.

np.max(np_array_2d, keepdims = True)

Ceea ce produce următoarea ieșire:

array(])

Și să verificăm dimensiunile:

np.max(np_array_2d, keepdims = True).ndim
2

Aici, când rulăm np.max pe np_array_2d cu keepdims = True, ieșirea are 2 dimensiuni.

Rețineți că valoarea maximă este aceeași: 8. Doar că dimensiunile ieșirii sunt diferite. Prin setarea keepdims = True, schimbăm structura ieșirii … în loc să fie un scalar, ieșirea este de fapt o matrice NumPy 2-d cu o singură valoare (8).

Dacă vreți să învățați știința datelor în Python, învățați NumPy

Dacă ați citit alte tutoriale aici, pe blogul de știință a datelor Sharp Sight, știți cât de importantă este manipularea datelor.

Dacă vreți să învățați serios știința datelor, trebuie să stăpâniți cu adevărat elementele de bază ale manipulării datelor. O parte imensă a fluxului de lucru în știința datelor este doar curățarea și manipularea datelor de intrare.

Dacă lucrați în Python, una dintre abilitățile esențiale pe care trebuie să le cunoașteți atunci este NumPy. Numpy este esențial pentru curățarea, manipularea și explorarea datelor dumneavoastră.

Dacă doriți să învățați știința datelor în Python, învățați NumPy și învățați-l bine.

Pentru mai multe tutoriale de știința datelor în Python, înscrieți-vă în lista noastră de e-mail

După ce am spus, dacă doriți să învățați NumPy și știința datelor în Python, atunci înscrieți-vă în lista noastră de e-mail.

Aici, pe blogul Sharp Sight, publicăm în mod regulat tutoriale de știința datelor.

Când vă înscrieți, veți primi tutoriale gratuite despre:

  • NumPy
  • Pandas
  • Base Python
  • Scikit learn
  • Machine learning
  • Deep learning
  • … și multe altele.

Când vom publica tutoriale, vi le vom trimite direct în căsuța dvs. de e-mail.

Vreți să învățați știința datelor în Python? Înscrieți-vă acum.

Înscrieți-vă pentru tutoriale GRATUITE despre știința datelor

Dacă doriți să stăpâniți rapid știința datelor, înscrieți-vă în lista noastră de e-mail.

Când vă înscrieți, veți primi tutoriale săptămânale GRATUITE despre cum să faceți știința datelor în R și Python.

Verifică-ți căsuța de e-mail pentru a confirma abonarea …

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.