2012-01-26 46 views
9

Tôi đã gặp chức năng numpy.apply_along_axis trong một số mã. Và tôi không hiểu tài liệu về nó.numpy.apply_along_axis thực hiện chính xác điều gì?

Đây là một ví dụ về tài liệu:

>>> def new_func(a): 
...  """Divide elements of a by 2.""" 
...  return a * 0.5 
>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]]) 
>>> np.apply_along_axis(new_func, 0, b) 
array([[ 0.5, 1. , 1.5], 
     [ 2. , 2.5, 3. ], 
     [ 3.5, 4. , 4.5]]) 

Khi đến nay tôi như nghĩ tôi hiểu được tài liệu hướng dẫn, tôi sẽ mong đợi:

array([[ 0.5, 1. , 1.5], 
     [ 4 , 5 , 6 ], 
     [ 7 , 8 , 9 ]]) 

tức là đã áp dụng các chức năng dọc theo trục [1,2,3] là trục trong [[1,2,3], [4,5,6], [7,8,9]]

Rõ ràng tôi sai. Bạn có thể sửa tôi không?

Trả lời

9

apply_along_axis áp dụng chức năng được cung cấp dọc theo lát 1D của mảng đầu vào, với các lát được thực hiện dọc theo trục bạn chỉ định. Vì vậy, trong ví dụ của bạn, new_func được áp dụng trên mỗi lát của mảng dọc theo trục đầu tiên. Nó trở thành rõ ràng hơn nếu bạn sử dụng một hàm vector có giá trị, chứ không phải là một đại lượng vô hướng, như thế này:

In [20]: b = np.array([[1,2,3], [4,5,6], [7,8,9]]) 

In [21]: np.apply_along_axis(np.diff,0,b) 
Out[21]: 
array([[3, 3, 3], 
     [3, 3, 3]]) 

In [22]: np.apply_along_axis(np.diff,1,b) 
Out[22]: 
array([[1, 1], 
     [1, 1], 
     [1, 1]]) 

Ở đây, numpy.diff được áp dụng theo từng lát hoặc trục đầu tiên hoặc thứ hai (chiều) của mảng đầu vào.

2

Chức năng được thực hiện trên các mảng 1-d dọc theo trục = 0. Bạn có thể chỉ định trục khác bằng cách sử dụng đối số "trục". Một cách sử dụng của mô hình này là:

np.apply_along_axis(np.cumsum, 0, b) 

Chức năng được thực hiện trên từng mảng con cùng chiều 0. Vì vậy, nó có nghĩa là cho các chức năng 1D và trả về một mảng 1D cho mỗi đầu vào 1D.

Một ví dụ khác là:

np.apply_along_axis(np.sum, 0, b) 

Cung cấp một lượng vô hướng cho một mảng 1-D. Tất nhiên bạn chỉ có thể đặt tham số trục trong cumsum hoặc tổng để thực hiện ở trên, nhưng điểm ở đây là nó có thể được sử dụng cho bất kỳ hàm 1-D nào bạn viết.

Các vấn đề liên quan