2012-01-26 5 views
9

私はいくつかのコードでnumpy.apply_along_axis関数を見つけました。私はそれについてのドキュメントを理解していません。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]]) 

限りI Iは、ドキュメントを理解思想として、私が期待されるだろう:

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

すなわち軸沿っ関数を適用しました[1,2,3]であり、[0123]、[4,5,6]、[7,8,9]]のの軸である

明らかに私は間違っています。私を修正できますか?

答えて

9

apply_along_axisは、指定した軸に沿って切断したスライスと、入力配列の1次元スライスに沿って供給された関数を適用します。したがって、あなたの例では、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次元関数に使用できる点です。

関連する問題