Phương thức einsum() đánh giá quy ước tổng Einstein trên các toán hạng. Sử dụng quy ước này, nhiều phép toán đại số tuyến tính đa chiều phổ biến có thể được biểu diễn một cách đơn giản. Ở chế độ ngầm định, einsum tính toán các giá trị này. Ở chế độ tường minh, einsum cung cấp thêm sự linh hoạt để tính toán các phép toán mảng khác có thể không được coi là các phép toán tổng Einstein cổ điển, bằng cách vô hiệu hóa hoặc buộc tổng qua các nhãn chỉ số được chỉ định.
Các bước thực hiện
Trước tiên, nhập thư viện cần thiết:
import numpy as np
Tạo mảng NumPy bằng phương thức arange() và reshape():
arr = np.arange(16).reshape(4, 4)
Hiển thị mảng:
print("Mảng của chúng ta...\n", arr)
Kiểm tra số chiều:
print("\nSố chiều của mảng...\n", arr.ndim)
Lấy kiểu dữ liệu:
print("\nKiểu dữ liệu của đối tượng mảng...\n", arr.dtype)
Lấy hình dạng:
print("\nHình dạng của đối tượng mảng...\n", arr.shape)
Để thực hiện tổng theo trục mảng (tổng qua một trục) với quy ước tổng Einstein, sử dụng phương thức numpy.einsum() trong Python:
print("\nKết quả...\n", np.einsum('ij->i', arr))
Ví dụ hoàn chỉnh
import numpy as np
# Tạo mảng NumPy bằng arange() và reshape()
arr = np.arange(16).reshape(4, 4)
# Hiển thị mảng
print("Mảng của chúng ta...\n", arr)
# Kiểm tra số chiều
print("\nSố chiều của mảng...\n", arr.ndim)
# Lấy kiểu dữ liệu
print("\nKiểu dữ liệu của đối tượng mảng...\n", arr.dtype)
# Lấy hình dạng
print("\nHình dạng của đối tượng mảng...\n", arr.shape)
# Tổng theo trục với einsum
print("\nKết quả...\n", np.einsum('ij->i', arr))
Kết quả đầu ra
Mảng của chúng ta...
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
Số chiều của mảng...
2
Kiểu dữ liệu của đối tượng mảng...
int64
Hình dạng của đối tượng mảng...
(4, 4)
Kết quả...
[ 6 22 38 54]
Giải thích: Ký hiệu 'ij->i' nghĩa là tổng hợp qua trục j (cột), giữ lại trục i (hàng). Kết quả là tổng của từng hàng: hàng 0 = 0+1+2+3=6, hàng 1 = 4+5+6+7=22, v.v.