Eynşteyn yekunu

Python-da Tensor Əməliyyatları
Eynşteynin Toplama Texnikaları
Numpy və Tensor Flow Nümunələri
Eynşteyn yekunu cover image

Einstein Summation notasiyası fizika və maşın öyrənməsində tez-tez istifadə olunan tenzor əməliyyatlarını təmsil etmək üçün qısa və güclü bir üsuldur. O, bizə kompakt formada tensorlar üzərində mürəkkəb hesablamalar yazmağa imkan verir. Biz Eynşteyn cəmlənməsi ilə bağlı əsasları, onu Numpy və Tensorflow ilə Python-da necə istifadə edəcəyimizi əhatə edəcəyik və onun istifadəsini göstərmək üçün nümunələr təqdim edəcəyik.

Eynşteyn yekunlaşdırmasının əsasları

Eynşteynin Toplama notasiyası (Einsum) tenzor ifadələrində təkrarlanan indekslərin cəmlənməsi ideyasına əsaslanır. Aşağıdakı iki qaydaya əsaslanır:

1. Təkrarlanan indekslər üzərində cəmləmə: Əgər indeks bir müddətdə iki dəfə görünürsə, o, üzərində cəmlənir.

2. Sərbəst indekslər: Yalnız bir dəfə görünən indekslər sərbəst indekslərdir və çıxış tensorunun oxlarını təmsil edir

Bunu iki A və B matrisinin vurulması nümunəsi ilə izah edək: nəticədə C matrisi aşağıdakı kimi müəyyən edilir.

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

Python-da həm Numpy, həm də Tensorflow kitabxanaları einsum funksiyasını təmin edir.

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

Yuxarıdakı misalda ij,jk->ik einsum sətridir:

ij A matrisinin indekslərini təmsil edir

jk B matrisinin indekslərini təmsil edir

->ik çıxış C matrisinin indekslərini təyin edir

Əməliyyat j indeksi üzərində cəmlənir

Tensorflow-da eyni kod belə görünür

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)

Daha çox Nümunələr

Vektorların daxili hasilatı

İki a və b vektorunun daxili hasili (nöqtə hasili) kimi müəyyən edilir

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

Vektorların Xarici Məhsulu

İki a və b vektorunun xarici hasili aşağıdakı kimi verilir:

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

Matrisin köçürülməsi

A matrisinin yerini onun indekslərini dəyişdirməklə əldə etmək olar

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

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

Matrisin izi

A matrisinin izi onun diaqonal elementlərinin cəmidir:

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


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

print(trace)
# Output: 5.0

Toplu Matrisin Vurması

Einsum toplu əməliyyatlar üçün xüsusilə faydalıdır. Tutaq ki, bizdə A və B matrisləri dəsti var və biz partiyada müvafiq matrisləri çoxaltmaq istəyirik:


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)

Burada b toplu ölçüsünü təmsil edir.

Einsum notasının üstünlükləri

1. Qısalıq: Einsum notasiyası yığcamdır və mürəkkəb əməliyyatları qısa şəkildə təmsil edə bilər

2. Çeviklik: Massivləri açıq şəkildə dəyişdirmədən və ya köçürmədən müxtəlif tenzor əməliyyatlarını idarə edə bilər.

3. Effektivlik: Bir çox kitabxanalar einsum əməliyyatlarını daxili olaraq optimallaşdırır və potensial olaraq daha yaxşı performansa gətirib çıxarır.


Career Services background pattern

Karyera Xidmətləri

Contact Section background image

Əlaqə saxlayaq

Code Labs Academy © 2025 Bütün hüquqlar qorunur.