は
は
In [190]: np.apply_along_axis(lol,0,tmp,2)
Out[190]: array([ 1.5, 2.5, 3.5])
In [191]: np.apply_along_axis(lol,1,tmp,2)
Out[191]: array([ 1.5, 6. ])
別lambda
はきれいに引数を切り替え:
In [192]: np.apply_along_axis(lambda x,y:lol(y,x),0,tmp,2)
Out[192]:
array([[ inf, 2. , 1. ],
[ 0.66666667, 0.5 , 0.4 ]])
(2/tmp
と同じ;軸はma tter)
関数呼び出しの余分なレイヤーは、実行速度を大幅に変更しません(引数を切り替えると時間が増えますが、余分なものの効果に焦点を当てたいと思います。lambda
)。
In [195]: timeit np.apply_along_axis(lol,1,tmp,2)
10000 loops, best of 3: 103 us per loop
In [196]: timeit np.apply_along_axis(lambda x,y:lol(x,y),1,tmp,2)
10000 loops, best of 3: 105 us per loop
魔法やapply_along_axis
の使用についての効率的な余分なものは何もありません。あなた(または私たち)は同じことをする繰り返しを書くことができます。より一般的になろうとしているためと考え
In [213]: np.apply_along_axis(lol,0,tmp,2)
Out[213]: array([ 1.5, 2.5, 3.5])
In [214]: np.array([lol(tmp[:,i],2) for i in range(tmp.shape[1])])
Out[214]: array([ 1.5, 2.5, 3.5])
In [215]: timeit np.apply_along_axis(lol,0,tmp,2)
10000 loops, best of 3: 132 us per loop
In [217]: timeit np.array([lol(tmp[:,i],2) for i in range(tmp.shape[1])])
10000 loops, best of 3: 64.1 us per loop
apply_along_axis
、遅い:
はapply_along_axis
と同等のリスト内包表記は、の2式を比較してみましょう。それはより便利かもしれませんが、明らかにより効率的ではありません。