np.dot() în NumPy

Algebră liniară NumPy 1.0+

Calculează produsul scalar a doi vectori sau produsul matriceal a două matrice.

Sintaxă
np.dot(a, b, out=None)
a.dot(b)

Ce face np.dot()

Pentru doi vectori 1D de aceeași lungime, np.dot(a, b) înmulțește elementele de pe aceleași poziții și adună rezultatele (produsul scalar): a[0]*b[0] + a[1]*b[1] + .... Un exemplu practic: totalul unui bon din cantități și prețuri.

Pentru o matrice și un vector sau pentru două matrice 2D, np.dot() face înmulțirea de matrice: numărul de coloane al primei trebuie să fie egal cu numărul de rânduri al celei de-a doua. Pentru matrice, codul nou folosește de obicei operatorul @ (vezi np.matmul), care se citește mai ușor; pe tablouri cu mai mult de 2 dimensiuni, dot și @ se comportă diferit.

Parametri

Parametru Descriere
a, b Vectori sau matrice cu forme compatibile. Dacă unul este scalar, rezultatul este o înmulțire obișnuită.
out Tablou în care se scrie rezultatul (opțional).

Ce returnează

Un scalar pentru doi vectori 1D; un tablou pentru matrice.

Exemple

Exemplul 1: Totalul unui bon

import numpy as np

cantitati = np.array([2, 1, 3])          # pâine, lapte, ouă (cutii)
preturi = np.array([4.5, 7.0, 12.0])     # lei
print("Total:", np.dot(cantitati, preturi), "lei")
print("La fel:", cantitati.dot(preturi))

Rezultat

Total: 52.0 lei
La fel: 52.0

Exemplul 2: Matrice înmulțită cu un vector

Fiecare rând este un magazin cu cantitățile vândute; rezultatul este încasarea fiecărui magazin.

import numpy as np

vandut = np.array([
    [10, 5, 2],   # Iași
    [8, 12, 4],   # Cluj
])
preturi = np.array([4.5, 7.0, 12.0])
print(np.dot(vandut, preturi))

Rezultat

[104. 168.]

Exemplul 3: Produsul a două matrice

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.dot(a, b))

try:
    np.dot(np.array([1, 2, 3]), np.array([1, 2]))
except ValueError as e:
    print("Eroare:", e)

Rezultat

[[19 22]
 [43 50]]
Eroare: shapes (3,) and (2,) not aligned: 3 (dim 0) != 2 (dim 0)

Greșeli frecvente

  • Folosești * în loc de np.dot: a * b înmulțește element cu element și nu adună. Pentru produs scalar sau matriceal folosește np.dot sau @.
  • Înmulțești matrice cu forme incompatibile (de exemplu (2, 3) cu (2, 3)) și primești ValueError: shapes ... not aligned. Verifică a.shape și b.shape; poate ai nevoie de b.T.

Comenzi înrudite

  • np.matmul() și operatorul @: Înmulțirea de matrice cu np.matmul sau operatorul @; diferența față de *, care înmulțește element cu element.
  • 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.
  • np.linalg.solve(): Rezolvă un sistem de ecuații liniare A @ x = b și returnează soluția x; verifici rezultatul cu np.allclose.
  • ndarray.shape: Află forma unui tablou (rânduri, coloane), numărul de dimensiuni și numărul total de elemente.