Einšteino apibendrinimas

Tensorinės operacijos Python
Einšteino sumavimo metodai
Numpy ir Tensor srauto pavyzdžiai
Einšteino apibendrinimas cover image

Einšteino sumavimo žymėjimas yra glaustas ir galingas būdas pavaizduoti tenzorines operacijas, dažnai naudojamas fizikoje ir mašininiame mokyme. Tai leidžia mums kompaktiška forma parašyti sudėtingus tenzorių skaičiavimus. Apžvelgsime Einšteino sumavimo pagrindus, kaip jį naudoti „Python“ su „Numpy“ ir „Tensorflow“ bei pateiksime jos naudojimą iliustruojančių pavyzdžių.

Einšteino sumavimo pagrindai

Einšteino sumavimo žymėjimas (Einsum) yra pagrįstas pasikartojančių indeksų sumavimo idėja tenzorių išraiškose. Jis pagrįstas šiomis dviem taisyklėmis:

1. Sumavimas per pasikartojančius indeksus: Jei indeksas pateikiamas du kartus per terminą, jis sumuojamas

2. Laisvieji indeksai: Tik vieną kartą rodomi indeksai yra laisvieji indeksai ir reiškia išvesties tenzoriaus ašis

Paaiškinkime tai dviejų matricų A ir B padauginimo pavyzdžiu: gauta matrica C apibrėžiama kaip

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

„Python“ ir „Numpy“, ir „Tensorflow“ bibliotekos teikia einsum funkciją.

Numigęs

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

Anksčiau pateiktame pavyzdyje „ij,jk->ik“ yra einsum eilutė:

„ij“ reiškia A matricos indeksus

„jk“ reiškia B matricos indeksus

„->ik“ nurodo išvesties matricos C indeksus

Operacija sumuojasi su indeksu j

Tas pats kodas atrodytų 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)

Daugiau pavyzdžių

Vidinis vektorių produktas

Dviejų vektorių a ir b vidinė sandauga (taškinė sandauga) apibrėžiama kaip

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

Išorinis vektorių produktas

Dviejų vektorių a ir b išorinė sandauga apskaičiuojama taip:

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

Matricos perkėlimas

Matricos A transponavimą galima gauti sukeitus jos indeksus

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

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

Matricos pėdsakai

Matricos A pėdsakas yra jos įstrižainių elementų suma:

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


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

print(trace)
# Output: 5.0

Paketinis matricos dauginimas

Einsum yra ypač naudingas paketinėms operacijoms. Tarkime, kad turime A ir B matricų paketą ir norime padauginti atitinkamas partijos matricas:


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)

Čia „b“ reiškia partijos matmenį.

Einsum žymėjimo pranašumai

1. Glaustumas: Einsum žymėjimas yra kompaktiškas ir gali glaustai pateikti sudėtingas operacijas

2. Lankstumas: gali atlikti įvairias tenzorines operacijas, aiškiai neperformuodamas ar neperkeldamas masyvų

3. Efektyvumas: daugelis bibliotekų optimizuoja einsum operacijas viduje, todėl gali būti geresnis našumas.


Career Services background pattern

Karjeros paslaugos

Contact Section background image

Palaikykime ryšį

Code Labs Academy © 2025 Visos teisės saugomos.