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.
Cơ bản
Phần tiêu đề “Cơ bản”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])Các phương thức của Ufunc
Phần tiêu đề “Các phương thức của Ufunc”Tất cả các ufunc đều có bốn phương thức.
reduce
Phần tiêu đề “reduce”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])accumulate
Phần tiêu đề “accumulate”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])reduceat
Phần tiêu đề “reduceat”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])outer
Phần tiêu đề “outer”Á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]])Quy tắc ép kiểu
Phần tiêu đề “Quy tắc ép kiểu”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.