2012-01-26 3 views
9

일부 코드에서는 numpy.apply_along_axis 함수를 발견했습니다. 그리고 나는 그것에 관한 문서를 이해하지 못한다. I 기대할 것, I 같이 I는 문서를 이해 생각 한국인numpy.apply_along_axis는 정확히 무엇을 수행합니까?

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

:

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

즉 축 따라 함수를 적용하는 데

은 문서의 일례이다 [1,2,3] 축은 [[1,2,3], [4,5,6], [7,8,9]]

분명히 나는 ​​틀리다. 날 바로 잡을 수 있니?

답변

9

apply_along_axis은 제공된 축을 따라 찍은 슬라이스와 함께 입력 배열의 1D 슬라이스를 따라 제공된 함수를 적용합니다. 따라서 귀하의 예에서는 new_func이 첫 번째 축을 따라 배열의 각 슬라이스에 적용됩니다.

여기
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]]) 

numpy.diff 입력 어레이의 제 1 또는 제 2 축 (치수)의 각 슬라이스에 따라 적용된다 :이 같은 다소 스칼라보다는 벡터 함수를 사용하는 경우에 명확해진다.

2

이 기능은 축 = 0을 따라 1 차원 어레이에서 수행됩니다. "axis"인수를 사용하여 다른 축을 지정할 수 있습니다. 이 패러다임의 사용량은 다음

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

함수는 차원 그래서,이 1D 기능 의미 0 따라서 각각의 서브 어레이 각각에서 수행 1D 입력 1 차원 배열을 반환한다.

또 다른 예이다 :

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

이 1-D 어레이 스칼라 출력을 제공한다. 물론 cumsum 또는 sum에 축 매개 변수를 설정하여 위와 같은 작업을 수행 할 수 있지만 여기서 말하는 요점은 사용자가 작성하는 모든 1 차원 함수에 사용할 수 있다는 것입니다.

관련 문제