Einšteina summēšana

Tenzoras darbības Python
Einšteina summēšanas metodes
Numpy un Tensor plūsmas piemēri
Einšteina summēšana cover image

Einšteina summēšanas apzīmējums ir kodolīgs un spēcīgs veids, kā attēlot tenzoras darbības, ko bieži izmanto fizikā un mašīnmācībā. Tas ļauj mums rakstīt sarežģītus aprēķinus uz tensoriem kompaktā formā. Mēs apskatīsim Einšteina summēšanas pamatus, kā to izmantot Python ar Numpy un Tensorflow, un sniegsim piemērus, lai ilustrētu tās izmantošanu.

Einšteina summēšanas pamati

Einšteina summēšanas apzīmējums (Einsum) balstās uz ideju par atkārtotu indeksu summēšanu tenzoru izteiksmēs. Tas ir balstīts uz diviem šādiem noteikumiem:

1. Atkārtotu indeksu summēšana: Ja indekss terminā parādās divas reizes, tas tiek summēts

2. Brīvie indeksi: Indeksi, kas parādās tikai vienu reizi, ir brīvi indeksi un attēlo izvades tensora asis

Ilustrēsim to ar divu matricu A un B reizināšanas piemēru: iegūtā matrica C ir definēta kā

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

Programmā Python gan Numpy, gan Tensorflow bibliotēka nodrošina einsum funkciju.

Neskaidrs

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

Iepriekš minētajā piemērā “ij,jk->ik” ir einsum virkne:

"ij" apzīmē matricas A indeksus

"jk" apzīmē matricas B indeksus

->ik norāda izvades matricas C indeksus

Operācija summējas ar indeksu j

Tas pats kods izskatās Tensorflow

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)

Vairāk piemēru

Vektoru iekšējais produkts

Divu vektoru a un b iekšējo reizinājumu (punktu reizinājumu) definē kā

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

Vektoru ārējais produkts

Divu vektoru a un b ārējo reizinājumu nosaka:

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

Matricas transponēšana

Matricas A transponēšanu var iegūt, mainot tās indeksus

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

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

Matricas pēdas

Matricas A trase ir tās diagonālo elementu summa:

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


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

print(trace)
# Output: 5.0

Pakešu matricas reizināšana

Einsum ir īpaši noderīgs partiju operācijām. Pieņemsim, ka mums ir matricu A un B partija, un mēs vēlamies reizināt atbilstošās matricas partijā:


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)

Šeit “b” apzīmē partijas dimensiju.

Einsuma apzīmējuma priekšrocības

1. Īsums: Einsum apzīmējums ir kompakts un var īsi attēlot sarežģītas darbības

2. Elastība: var veikt dažādas tenzora darbības, nepārveidojot vai netransponējot masīvus

3. Efektivitāte: Daudzas bibliotēkas optimizē einsum operācijas iekšēji, iespējams, uzlabojot veiktspēju.


Career Services background pattern

Karjeras pakalpojumi

Contact Section background image

Sazināsimies

Code Labs Academy © 2025 Visas tiesības paturētas.