Ang Einstein Summation

Tensor Operations sa Python
Einstein Summation Techniques
Numpy at Tensor Flow Examples
Ang Einstein Summation cover image

Ang Einstein Summation notation ay isang maikli at mahusay na paraan upang kumatawan sa mga tensor operation, kadalasang ginagamit sa physics at machine learning. Ito ay nagpapahintulot sa amin na magsulat ng mga kumplikadong kalkulasyon sa mga tensor sa isang compact na form. Sasaklawin namin ang mga pangunahing kaalaman sa Einstein summation, kung paano ito gamitin sa Python na may Numpy at Tensorflow, at magbibigay ng mga halimbawa upang ilarawan ang paggamit nito.

Mga Pangunahing Kaalaman ng Einstein Summation

Ang Einstein Summation notation (Einsum) ay batay sa ideya ng pagsusuma ng paulit-ulit na mga indeks sa mga tensor expression. Ito ay batay sa sumusunod na dalawang patakaran:

1. Pagsusuma sa mga paulit-ulit na index: Kung ang isang index ay lilitaw nang dalawang beses sa isang termino, ito ay ibubuod

2. Mga libreng indeks: Ang mga indeks na isang beses lang lumalabas ay mga libreng indeks at kumakatawan sa mga axes ng output tensor

Ilarawan natin ito sa halimbawa ng pagpaparami ng dalawang matrice A at B: ang resultang matrix C ay tinukoy bilang

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

Sa Python, ang Numpy at Tensorflow library ay nagbibigay ng einsum function.

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]]

Sa halimbawa sa itaas, ang ij,jk->ik ay ang einsum string:

Ang ij ay kumakatawan sa mga indeks ng matrix A

Ang jk ay kumakatawan sa mga indeks ng matrix B

Tinutukoy ng ->ik ang mga indeks ng output matrix C

Ang operasyon ay nagsusuma sa index j

Ang parehong code sa Tensorflow ay magiging hitsura

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)

Higit pang mga Halimbawa

Panloob na Produkto ng mga Vector

Ang panloob na produkto (dot product) ng dalawang vectors a at b ay tinukoy bilang

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

Panlabas na Produkto ng mga Vector

Ang panlabas na produkto ng dalawang vectors a at b ay ibinibigay ng:

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]]

Transpose ng isang Matrix

Ang transpose ng isang matrix A ay maaaring makuha sa pamamagitan ng pagpapalit ng mga indeks nito

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

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

Bakas ng isang Matrix

Ang bakas ng isang matrix A ay ang kabuuan ng mga elemento ng dayagonal nito:

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


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

print(trace)
# Output: 5.0

Batch Matrix Multiplication

Ang Einsum ay partikular na kapaki-pakinabang para sa mga batch na operasyon. Ipagpalagay na mayroon kaming isang batch ng mga matrice A at B, at gusto naming i-multiply ang kaukulang mga matrice sa batch:


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)

Dito, kinakatawan ng b ang dimensyon ng batch.

Mga Bentahe ng Einsum Notation

1. Conciseness: Ang notation ng Einsum ay compact, at maaaring kumatawan sa mga kumplikadong operasyon nang maikli

2. Kakayahang umangkop: Maaari nitong pangasiwaan ang iba't ibang uri ng mga pagpapatakbo ng tensor nang walang tahasang muling paghubog o pag-transpos ng mga array

3. Kahusayan: Maraming mga aklatan ang nag-o-optimize sa mga pagpapatakbo ng einsum sa loob, na posibleng humahantong sa mas mahusay na pagganap.


Career Services background pattern

Mga Serbisyo sa Karera

Contact Section background image

Manatiling nakikipag-ugnayan tayo

Code Labs Academy © 2025 Lahat ng karapatan ay nakalaan.