Bỏ qua để đến nội dung

Các hàm phổ quát (Universal Functions - ufunc)

Hàm phổ quát (hay gọi tắt là ufunc) là một hàm hoạt động trên các ndarray theo kiểu từng phần tử, hỗ trợ lan truyền mảng (broadcasting), ép kiểu (type casting) và một số tính năng tiêu chuẩn khác.

Trong NumPy, các hàm phổ quát là các thể hiện của lớp numpy.ufunc. Ví dụ đơn giản nhất là toán tử cộng:

np.array([0,2,3,4]) + np.array([1,1,-1,2])
# array([1, 3, 2, 6])

Tất cả các ufunc đều có bốn phương thức.

Giảm số chiều của mảng đi một bằng cách áp dụng ufunc dọc theo một trục.

x = np.arange(9).reshape(3,3)
np.add.reduce(x, 1)
# array([ 3, 12, 21])

Tích lũy kết quả của việc áp dụng toán tử cho tất cả các phần tử.

np.add.accumulate([2, 3, 5])
# array([ 2, 5, 10])

Thực hiện giảm (tại chỗ) với các lát cắt (slices) được chỉ định trên một trục duy nhất.

np.add.reduceat(np.arange(8),[0,4, 1,5, 2,6, 3,7])[::2]
# array([ 6, 10, 14, 18])

Áp dụng ufunc cho tất cả các cặp (a, b) với a trong A và b trong B.

np.multiply.outer([1, 2, 3], [4, 5, 6])
# array([[ 4, 5, 6],
# [ 8, 10, 12],
# [12, 15, 18]])

Cốt lõi của mỗi ufunc là một vòng lặp có bước nhảy một chiều thực hiện hàm thực tế cho một sự kết hợp kiểu cụ thể. Khi một ufunc được sử dụng, trước tiên nó sẽ kiểm tra dtype của mảng đầu vào và cố gắng tìm một vòng lặp với các kiểu chính xác.