https://docs.scipy.org/doc/numpy/reference/generated/numpy.apply_along_axis.html
のscipy公式ページを見ると関数を設定してそこに引数を設定できる。apply_along_axisの使い方の備忘録。
最近axisについて勉強する機会があったので動作確認。
>>> def my_func(a):
... """Average first and last element of a 1-D array"""
... return (a[0] + a[-1]) * 0.5
>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> np.apply_along_axis(my_func, 0, b)
array([ 4., 5., 6.])
>>> np.apply_along_axis(my_func, 1, b)
array([ 2., 5., 8.])
という関数をapply_along_axisに渡し挙動を見ている。
>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> np.apply_along_axis(my_func, 0, b)
array([ 4., 5., 6.])
>>> np.apply_along_axis(my_func, 1, b)
array([ 2., 5., 8.])
apply_along_axisのmy_func(a)は引数aのnp.array配列を代入し演算子結果を返す。
そこで重要なのがaxis。
axis=0だと引数にとる配列の一番外側を基準にするので
a[0]=[1, 2, 3]とa[-1]=[7, 8, 9]を足し0.5をかけているので
[[1 + 7]*0.5, [2 + 8]*0.5, [3 + 9]*0.5]
array([ 4., 5., 6.])
となる。
axis=1と置くと外側から二番目の配列にmy_funcを適応して計算する。
[1, 2, 3],[4, 5, 6],[7, 8, 9]のa[0]とa[-1]を足して配列に戻しているので
[[1 + 3]*0.5, [4 + 6]*0.5, [7 + 9]*0.5]
array([ 2., 5., 8.])
となる。