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

Tính sai phân rời rạc cấp n theo trục cho trước trong Python

Để tính sai phân rời rạc cấp n, sử dụng phương thức numpy.diff(). Sai phân đầu tiên được cho bởi out[i] = a[i+1] - a[i] dọc theo trục đã cho, các sai phân cao hơn được tính bằng cách sử dụng diff đệ quy. Phương thức diff() trả về các sai phân cấp n. Hình dạng đầu ra giống với a ngoại trừ dọc theo trục nơi chiều nhỏ hơn n. Kiểu của đầu ra giống với kiểu của hiệu giữa hai phần tử bất kỳ của a. Trong hầu hết các trường hợp giống với kiểu của a. Ngoại lệ đáng chú ý là datetime64, cho ra mảng đầu ra timedelta64.

Tham số thứ nhất là mảng đầu vào. Tham số thứ hai là n, số lần giá trị được sai phân. Nếu bằng 0, đầu vào được trả về như gốc. Tham số thứ ba là trục dọc theo đó sai phân được lấy, mặc định là trục cuối. Tham số thứ tư là các giá trị để prepend hoặc append vào mảng đầu vào dọc theo trục trước khi thực hiện sai phân. Các giá trị scalar được mở rộng thành mảng độ dài 1 theo hướng trục và hình dạng mảng đầu vào theo các trục khác.

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 int với NaN:

arr = np.array([[10, 15, 30, 65], [80, 87, 100, np.nan]])

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 sai phân rời rạc cấp n, sử dụng numpy.diff() với axis=1:

print("\nSai phân rời rạc..\n", np.diff(arr, axis=1))

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 int với nan
arr = np.array([[10, 15, 30, 65], [80, 87, 100, np.nan]])

# 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 sai phân theo trục 1
print("\nSai phân rời rạc..\n", np.diff(arr, axis=1))

Kết quả đầu ra

Mảng của chúng ta...
 [[ 10. 15. 30. 65.]
 [ 80. 87. 100. nan]]
Số chiều của mảng...
 2
Kiểu dữ liệu của đối tượng mảng...
 float64
Sai phân rời rạc..
 [[ 5. 15. 35.]
 [ 7. 13. nan]]

Giải thích: Với axis=1, tính sai phân theo hàng:

  • Hàng 0: [15-10, 30-15, 65-30] = [5, 15, 35]
  • Hàng 1: [87-80, 100-87, NaN-100] = [7, 13, NaN]
Khác với bài trước, hàng 1 có giá trị 100 thay vì NaN ở cột thứ 3, nên sai phân thứ 2 là 13 (thay vì NaN).