Einsteinin summaus

Tensorioperaatiot Pythonissa
Einsteinin summaustekniikat
numpy- ja tensorivirtaesimerkit
Einsteinin summaus cover image

Einsteinin summausmerkintä on ytimekäs ja tehokas tapa esittää tensorioperaatioita, jota käytetään usein fysiikassa ja koneoppimisessa. Sen avulla voimme kirjoittaa monimutkaisia ​​laskutoimituksia tensoreille kompaktissa muodossa. Käsittelemme Einsteinin summauksen perusteet, kuinka sitä käytetään Pythonissa Numpyn ja Tensorflown kanssa, ja annamme esimerkkejä sen käytön havainnollistamiseksi.

Einsteinin summauksen perusteet

Einsteinin summausmerkintä (Einsum) perustuu ajatukseen toistuvien indeksien summaamisesta tensorilausekkeissa. Se perustuu seuraaviin kahteen sääntöön:

1. Toistuvien indeksien summaus: Jos indeksi esiintyy kahdesti termissä, se summataan

2. Vapaat indeksit: Vain kerran esiintyvät indeksit ovat vapaita indeksejä ja edustavat lähtötensorin akseleita

Havainnollistetaan tätä esimerkillä kahden matriisin A ja B kertomisesta: tuloksena oleva matriisi C määritellään

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

Pythonissa sekä Numpy- että Tensorflow-kirjastot tarjoavat einsum-funktion.

Nuhjuinen

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

Yllä olevassa esimerkissä ij,jk->ik on einsum-merkkijono:

"ij" edustaa matriisin A indeksejä

"jk" edustaa matriisin B indeksejä

->ik määrittää lähtömatriisin C indeksit

Operaatio summaa indeksin j

Sama koodi näyttäisi Tensorflowssa

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)

Lisää esimerkkejä

Vektorien sisätuote

Kahden vektorin a ja b sisätulo (pistetulo) määritellään seuraavasti

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

Vektorien ulkotuote

Kahden vektorin a ja b ulkotulo saadaan seuraavasti:

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

Matriisin transponointi

Matriisin A transponointi saadaan vaihtamalla sen indeksejä

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

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

Matriisin jälki

Matriisin A jälki on sen diagonaalielementtien summa:

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


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

print(trace)
# Output: 5.0

Erämatriisikertominen

Einsum on erityisen hyödyllinen eräoperaatioissa. Oletetaan, että meillä on erä matriiseja A ja B, ja haluamme kertoa erän vastaavat matriisit:


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)

Tässä "b" edustaa erän mittaa.

Einsum-merkinnän edut

1. Lyhytisyys: Einsum-merkintä on kompakti ja voi esittää monimutkaisia ​​operaatioita ytimekkäästi

2. Joustavuus: Se pystyy käsittelemään monenlaisia ​​tensoritoimintoja ilman, että taulukoita nimenomaisesti muotoillaan uudelleen tai transponoidaan

3. Tehokkuus: Monet kirjastot optimoivat einsum-toiminnot sisäisesti, mikä saattaa parantaa suorituskykyä.


Career Services background pattern

Urapalvelut

Contact Section background image

Pidetään yhteyttä

Code Labs Academy © 2025 Kaikki oikeudet pidätetään.