Computer >> Máy Tính >  >> Lập trình >> Python

Co giãn căng với quy ước tổng kết Einstein bằng Python

Để co Tensor với quy ước tổng kết Einstein, hãy sử dụng phương thức numpy.einsum () inPython. Tham số đầu tiên là chỉ số con. Nó chỉ định các chỉ số con cho tổng kết dưới dạng danh sách các nhãn chỉ số con được phân tách bằng dấu phẩy. Tham số thứ 2 là các toán hạng. Đây là các mảng cho hoạt động.

Phương thức einsum () đánh giá quy ước tổng kết Einstein về các toán hạng. Sử dụng quy ước tính tổng củaEinstein, nhiều phép toán mảng đại số tuyến tính, đa chiều phổ biến có thể được biểu diễn theo cách đơn giản. Trong chế độ ngầm định, einsum tính toán các giá trị này.

Ở chế độ rõ ràng, einsum cung cấp tính linh hoạt hơn nữa để tính toán các phép toán mảng khác mà có thể không được coi là các phép tính tổng của Einstein cổ điển, bằng cách vô hiệu hóa hoặc buộc các nhãn chỉ số con được chỉ định tổng hợp.

Các bước

Đầu tiên, hãy nhập các thư viện được yêu cầu -

import numpy as np

Tạo mảng một chiều hai chiều bằng cách sử dụng phương thức array () -

arr1 = np.arange(60.).reshape(3,4,5)
arr2 = np.arange(24.).reshape(4,3,2)

Hiển thị các mảng -

print("Array1...\n",arr1)
print("\nArray2...\n",arr2)

Kiểm tra Kích thước của cả hai mảng -

print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)

Kiểm tra Hình dạng của cả hai mảng -

print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)

Để co Tensor với quy ước tổng kết Einstein, hãy sử dụng phương thức numpy.einsum () inPython -

print("\nResult (Tensor contraction)...\n",np.einsum('ijk,jil->kl', arr1, arr2))

Ví dụ

import numpy as np

# Creating two numpy One-Dimensional array using the array() method
arr1 = np.arange(60.).reshape(3,4,5)
arr2 = np.arange(24.).reshape(4,3,2)

# Display the arrays
print("Array1...\n",arr1)
print("\nArray2...\n",arr2)

# Check the Dimensions of both the arrays
print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)

# Check the Shape of both the arrays
print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)

# For Tensor contraction with Einstein summation convention, use the numpy.einsum() method in Python.
print("\nResult (Tensor contraction)...\n",np.einsum('ijk,jil->kl', arr1, arr2))

Đầu ra

Array1...
[[[ 0. 1. 2. 3. 4.]
[ 5. 6. 7. 8. 9.]
[10. 11. 12. 13. 14.]
[15. 16. 17. 18. 19.]]

[[20. 21. 22. 23. 24.]
[25. 26. 27. 28. 29.]
[30. 31. 32. 33. 34.]
[35. 36. 37. 38. 39.]]

[[40. 41. 42. 43. 44.]
[45. 46. 47. 48. 49.]
[50. 51. 52. 53. 54.]
[55. 56. 57. 58. 59.]]]

Array2...
[[[ 0. 1.]
[ 2. 3.]
[ 4. 5.]]

[[ 6. 7.]
[ 8. 9.]
[10. 11.]]

[[12. 13.]
[14. 15.]
[16. 17.]]

[[18. 19.]
[20. 21.]
[22. 23.]]]

Dimensions of Array1...
3

Dimensions of Array2...
3

Shape of Array1...
(3, 4, 5)

Shape of Array2...
(4, 3, 2)

Result (Tensor contraction)...
[[4400. 4730.]
[4532. 4874.]
[4664. 5018.]
[4796. 5162.]
[4928. 5306.]]