Suma Einstein

Operații cu tensori în Python
tehnici de însumare Einstein
exemple de flux Numpy și tensor

Actualizat pe July 24, 202416 Minute citite

Suma Einstein cover image

Notația Einstein Summation este o modalitate concisă și puternică de a reprezenta operațiile tensorilor, adesea folosită în fizică și învățare automată. Ne permite să scriem calcule complexe pe tensori într-o formă compactă. Vom acoperi elementele de bază despre însumarea Einstein, cum să o folosim în Python cu Numpy și Tensorflow și vom oferi exemple pentru a ilustra utilizarea acesteia.

Bazele însumării Einstein

Notația Einstein Summation (Einsum) se bazează pe ideea însumării indicilor repeți în expresii tensorale. Se bazează pe următoarele două reguli:

1. Însumarea peste indici repeți: Dacă un indice apare de două ori într-un termen, acesta este însumat peste

2. Indicii liberi: Indicii care apar o singură dată sunt indici liberi și reprezintă axele tensorului de ieșire

Să ilustrăm acest lucru cu exemplul de înmulțire a două matrice A și B: matricea rezultată C este definită ca

Cik=jAijBjkC_{ik} = \sum\limits_{j}^{}A_{ij}B_{jk}

În Python, atât bibliotecile Numpy, cât și Tensorflow oferă o funcție einsum.

Numpy

import numpy as np

# Define two matrices A and B
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# Perform matrix multiplication using einsum
C = np.einsum('ij,jk->ik', A, B)

print(C)
# [[19 22]
#  [43 50]]

În exemplul de mai sus, ij,jk->ik este șirul einsum:

ij reprezintă indicii matricei A

jk reprezintă indicii matricei B

->ik specifică indicii matricei de ieșire C

Operația însumează peste indicele j

Același cod în Tensorflow ar arăta

import tensorflow as tf

# Define two matrices A and B
A = tf.constant([[1, 2], [3, 4]], dtype=tf.float32)
B = tf.constant([[5, 6], [7, 8]], dtype=tf.float32)

# Perform matrix multiplication using einsum
C = tf.einsum('ij,jk->ik', A, B)

print(C)
# tf.Tensor(
# [[19. 22.]
#  [43. 50.]], shape=(2, 2), dtype=float32)

Mai multe exemple

Produsul interior al vectorilor

Produsul interior (produsul punctual) a doi vectori a și b este definit ca

c=iaibic = \sum\limits_{i}^{}a_{i}b_{i}

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

c = np.einsum('i,i->', a, b)

print(c)  # Output: 32

Produsul exterior al vectorilor

Produsul exterior a doi vectori a și b este dat de:

Cij=aibjC_{ij} = a_{i}b_{j}

C = np.einsum('i,j->ij', a, b)

print(C)
# Output
# [[4 5 6]
#  [8 10 12]
#  [12 15 18]]

Transpunerea unei matrice

Transpunerea unei matrice A poate fi obținută prin schimbarea indicilor acesteia

A_transpose = np.einsum('ij->ji', A)

print(A_transpose)
# Output
# [[1. 3.]
#  [2. 4.]]

Urma unei matrice

Urma unei matrice A este suma elementelor diagonale ale acesteia:

Tr(A)=iAiiAiiTr(A) = \sum\limits_{i}^{}A_{ii}A_{ii}


trace = np.einsum('ii->', A)

print(trace)
# Output: 5.0

Înmulțirea matricei în loturi

Einsum este deosebit de util pentru operațiunile pe lot. Să presupunem că avem un lot de matrice A și B și dorim să înmulțim matricele corespunzătoare din lot:


A = np.random.rand(3, 2, 2)
B = np.random.rand(3, 2, 2)

# Perform batch matrix multiplication
C = np.einsum('bij,bjk->bik', A, B)

print(C)

Aici, b reprezintă dimensiunea lotului.

Avantajele notației Einsum

1. Concizie: Notația Einsum este compactă și poate reprezenta succint operații complexe

2. Flexibilitate: Poate gestiona o mare varietate de operații cu tensori fără a remodela sau transpune în mod explicit tablourile

3. Eficiență: Multe biblioteci optimizează operațiunile einsum intern, ceea ce poate duce la o performanță mai bună.

Luați în considerare o carieră tehnologică - aflați mai multe despre bootcamp -urile online ale CLA

Career Services background pattern

Servicii de carieră

Contact Section background image

Să rămânem în legătură

Code Labs Academy © 2025 Toate drepturile rezervate.