Amintiți-vă tabelul nostru de operatori matematici Python (Figura 5.1).
| Operator | Operația |
| + | adunare |
| – | scădere |
| * | înmulțire |
| / | împărțire |
| ** | exponențiere (“ridicare la puterea a”) |
| () | grupare |
Figura 5.1: Operatorii matematici de bază din Python.
Ce fac acele lucruri dacă le folosim în mod agregat, în loc de date atomice? Răspunsul este: ceva super cool și util.
Operarea pe o matrice și o singură valoare
Luați în considerare următorul cod: 30
num_likes_today = np.array([6,61,0,0,14]) num_likes_tomorrow = num_likes_today + 3 print(num_likes_tomorrow)
▌ [ 9 64 3 3 17 ]
Vezi ce sa întâmplat? „Adăugarea lui 3” la matrice înseamnă adăugarea lui 3 la fiecare element. Toate într-o singură linie compactă de cod, putem face cinci – sau chiar cinci miliarde – de operațiuni. Acest lucru funcționează și pentru toți ceilalți operatori din Figura 5.1.
Din motive oarecum ciudate, acest tip de lucru se numește operație vectorizată. Tot ce trebuie să știi este că asta înseamnă rapid. Și este „rapid” în două moduri diferite: rapid pentru a scrie codul (deoarece în loc să folosiți o buclă, pe care o vom acoperi în capitolul 14, trebuie doar să scrieți o singură declarație cu semnele + și =) și, mai important, rapid în executare. Din motive și mai ciudate, codul de mai sus va rula rapid chiar dacă num_likes_today a avut cinci sute de milioane de elemente în loc de doar cinci. După cum veți afla dacă o să încercați vreodată, o buclă Python este mult mai lentă. (2)
Nu mă înțelegeți greșit: există momente în care va trebui să folosim o buclă pentru că nu avem de ales. Dar regula generală cu Python este: dacă vă puteți da seama cum să efectuați un calcul fără a utiliza o buclă, faceți-o întotdeauna!
Operarea pe două matrice
Posibil și mai cool, putem chiar folosi „+” (sau „-”, sau „*”, sau…) pe două matrice întregi împreună. Exemplu:
salaries = np.array([38000, 102000, 55750, 29500, 250000]) raises = np.array([1000, 4000, 2000, 1000, 2000]) salaries = salaries + raises print(salaries)
Acest cod produce:
▌ [ 39000 106000 57750 30500 252000]
Puteți vedea de ce? „Adăugarea” celor două matrici împreună a efectuat adăugarea element cu element. Rezultatul este o nouă matrice cu 38000 + 1000 ca prim element, 102000 + 4000 ca al doilea element, etc. Și aceasta este o operație vectorizată fulgerătoare și funcționează și cu toți ceilalți operatori matematici.
Doar pentru a sublinia din nou un punct înainte de a continua. În exemplul anterior, am atribuit rezultatul operației unei variabile noi, num_likes_tomorrow. Aceasta înseamnă că num_likes_today în sine a fost neschimbat de cod. În schimb, în exemplul pe care tocmai l-am făcut, am atribuit rezultatul operației înapoi într-o variabilă existentă (salaries). Deci salaries au fost actualizate ca urmare a acestui cod.
(2) Tocmai am făcut comparația pe laptopul meu și iată rezultatele. Folosind operatorul vectorizat simplu „+”, mașina mea a adăugat numărul 3 la o matrice cu cinci sute de milioane de elemente în doar 1,51 secunde. O buclă, în schimb, a durat 2,8 minute pentru a face același lucru.
Sursa: Stephen Davies, The Crystal Ball – Instruction Manual, Vol. 1: Introduction to Data Science, v. 1.1. Copyright © 2021 Stephen Davies. Licența CC BY-SA 4.0. Traducere și adaptare: Nicolae Sfetcu. © 2024 MultiMedia Publishing, Introducere în Știința Datelor, Volumul 1
Descoperă mai multe la MultiMedia
Abonează-te ca să primești ultimele articole prin email.



Lasă un răspuns