Ce face Broadcasting
Broadcasting înseamnă că NumPy „întinde” tabloul mai mic peste cel mare, fără să copieze datele. Cel mai simplu caz: a + 10 adaugă 10 la fiecare element.
Regula: formele se compară de la dreapta la stânga, dimensiune cu dimensiune. Două dimensiuni sunt compatibile dacă sunt egale sau dacă una dintre ele este 1. Dimensiunile lipsă din stânga se consideră 1. De exemplu (2, 3) și (3,) sunt compatibile (rândul se aplică fiecărui rând), iar (2, 3) și (2,) nu.
Ca să aplici o valoare pe fiecare rând (o coloană), transformă tabloul 1D într-o coloană cu np.newaxis: b[:, np.newaxis] are forma (2, 1). Formele incompatibile dau ValueError.
Parametri
| Parametru | Descriere |
|---|---|
np.newaxis |
Folosit la indexare, adaugă o dimensiune de lungime 1 (este None). |
Ce returnează
Un tablou cu forma „cea mai mare” pe fiecare dimensiune.
Exemple
Exemplul 1: Scalar și rând
Prețurile pe 2 magazine și 3 produse: un adaos fix de 2 lei și apoi un discount diferit pe fiecare produs (rând de formă (3,)).
import numpy as np
preturi = np.array([[10.0, 20.0, 30.0],
[12.0, 18.0, 33.0]])
print(preturi + 2)
discount = np.array([0.9, 0.8, 1.0])
print(preturi * discount)
Rezultat
[[12. 22. 32.]
[14. 20. 35.]]
[[ 9. 16. 30. ]
[10.8 14.4 33. ]]
Exemplul 2: Coloană cu np.newaxis
Fiecare magazin are alt cost de transport. Forma (2,) devine (2, 1) și se adaugă pe rânduri.
import numpy as np
preturi = np.array([[10, 20, 30],
[12, 18, 33]])
transport = np.array([5, 1])
coloana = transport[:, np.newaxis]
print(coloana.shape)
print(preturi + coloana)
Rezultat
(2, 1)
[[15 25 35]
[13 19 34]]
Exemplul 3: Forme incompatibile
Ultimele dimensiuni sunt 3 și 2: nu sunt egale și niciuna nu este 1.
import numpy as np
preturi = np.array([[10, 20, 30],
[12, 18, 33]])
transport = np.array([5, 1])
try:
print(preturi + transport)
except ValueError as e:
print("Eroare:", e)
Rezultat
Eroare: operands could not be broadcast together with shapes (2,3) (2,)
Greșeli frecvente
- Adaugi un tablou 1D cu lungimea egală cu numărul de rânduri și aștepți să se aplice pe rânduri. Broadcasting-ul aliniază la dreapta (pe coloane); folosește
b[:, np.newaxis]. - Combini fără să vrei o coloană
(3, 1)cu un rând(3,): nu primești eroare, ci un tablou(3, 3). Verificăshapeînainte. - Crezi că broadcasting-ul copiază tabloul mic de mai multe ori în memorie. Nu copiază: calculul se face direct pe datele existente.
Comenzi înrudite
Operații element cu element și ufunc-uri: Operatorii aritmetici și funcțiile matematice NumPy (ufunc-uri) se aplică pe fiecare element, fără bucle.ndarray.shape: Află forma unui tablou (rânduri, coloane), numărul de dimensiuni și numărul total de elemente.ndarray.reshape(): Schimbă forma unui tablou (de exemplu din 12 elemente în 3 x 4) fără să-i schimbe datele.ndarray.T și np.transpose(): Transpune un tablou: rândurile devin coloane și coloanele devin rânduri.