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

Trả về gradient của mảng N chiều và chỉ định thứ tự cạnh trong Python

Gradient được tính bằng sai phân trung tâm bậc hai chính xác tại các điểm nội bộ và sai phân một phía (tiến hoặc lùi) bậc nhất hoặc bậc hai chính xác tại biên. Gradient trả về do đó có cùng hình dạng với mảng đầu vào.

Tham số thứ nhất, f là mảng N chiều chứa mẫu của hàm scalar. Tham số thứ hai là varargs tức khoảng cách giữa các giá trị f. Mặc định khoảng cách đơn vị cho tất cả chiều.

Tham số thứ ba là edge_order {1, 2} tức gradient được tính bằng sai phân bậc N chính xác tại biên. Mặc định: 1. Tham số thứ tư là axis, gradient chỉ được tính dọc theo trục hoặc các trục đã cho. Mặc định (axis=None) là tính gradient cho tất cả các trục của mảng đầu vào. axis có thể âm, trong trường hợp đó nó đếm từ trục cuối về trục đầu. Phương thức trả về danh sách ndarray tương ứng với đạo hàm của f theo từng chiều. Mỗi đạo hàm có cùng hình dạng với f.

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 array(). Chúng ta thêm các phần tử kiểu float:

arr = np.array([20, 35, 57, 70, 85, 120], dtype=float)

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)

Gradient được tính bằng sai phân trung tâm bậc hai tại điểm nội bộ và sai phân một phía bậc nhất hoặc bậc hai tại biên. Gradient trả về có cùng hình dạng với mảng đầu vào:

print("\nKết quả (gradient)...\n", np.gradient(arr, edge_order=2))

Ví dụ hoàn chỉnh

import numpy as np

# Tạo mảng NumPy bằng array()
# Thêm các phần tử kiểu float
arr = np.array([20, 35, 57, 70, 85, 120], dtype=float)

# 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)

# Tính gradient với edge_order=2 (bậc 2 tại biên)
print("\nKết quả (gradient)...\n", np.gradient(arr, edge_order=2))

Kết quả đầu ra

Mảng của chúng ta...
 [ 20. 35. 57. 70. 85. 120.]
Số chiều của mảng...
 1
Kiểu dữ liệu của đối tượng mảng...
 float64
Kết quả (gradient)...
 [11.5 18.5 17.5 14. 25. 45. ]

Giải thích: Với edge_order=2, sử dụng sai phân bậc 2 tại biên:

  • Điểm 0 (biên trái): độ dốc tiến bậc 2 → 11.5
  • Điểm 1-4 (nội bộ): sai phân trung tâm bậc 2 → 18.5, 17.5, 14.0, 25.0
  • Điểm 5 (biên phải): độ dốc lùi bậc 2 → 45.0
Mặc định edge_order=1 sẽ dùng sai phân bậc 1 tại biên cho kết quả khác.