Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Trích xuất đường chéo của ma trận với quy ước tổng Einstein trong Python

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. Để trích xuất đường chéo của ma trận với quy ước tổng Einstein, sử dụng phương thức numpy.einsum() trong Python.

Tham số đầu tiên là chỉ số (subscript). Nó chỉ định các chỉ số cho tổng dưới dạng danh sách các nhãn chỉ số cách nhau bởi dấu phẩy. Tham số thứ hai là các toán hạng (operands). Đây là các mảng cho phép toán.

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)

Để trích xuất đường chéo của ma trận với quy ước tổng Einstein, sử dụng phương thức numpy.einsum():

print("\nKết quả...\n", np.einsum('ii->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)

# Trích xuất đường chéo với einsum
print("\nKết quả...\n", np.einsum('ii->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ả...
 [ 0  5 10 15]

Giải thích: Ký hiệu 'ii->i' sử dụng cùng một nhãn i cho cả hai chiều, điều này buộc NumPy chỉ lấy các phần tử nơi hàng và cột trùng nhau (đường chéo chính). Kết quả là các phần tử arr[0,0]=0, arr[1,1]=5, arr[2,2]=10, arr[3,3]=15.