numpyのnumpy.apply_along_axis()
関数が単純なPythonループよりも優れていると、私は混乱します。例えば、多くの行の行列の場合を考えると、あなたは、各行の合計を計算したい:なぜnumpy.apply_along_axisがPythonループよりも遅いようですか?
x = np.ones([100000, 3])
sums1 = np.array([np.sum(x[i,:]) for i in range(x.shape[0])])
sums2 = np.apply_along_axis(np.sum, 1, x)
(ここでは私もnp.sum
、ビルトインnumpyの機能を使用していて、まだsums1
を計算しますPythonループ)は、sums2
(apply_along_axis
)の計算には2000ms(WindowsではNumPy 1.6.1)を使用します。さらにRのrowMeans関数を20ms未満で実行することができます(私はCコードを呼び出すことができます)。同様のR関数apply()
は約600msで実行できます。あなたは、単にこれはあなたが提起した2つの方法よりもはるかに高速である
sums3 = np.sum(x, axis=1)
を使用して合計を計算できるよう
残念ながら、軸に沿って適用することは、スピードに関係のないタスクのみの選択肢と思われる。 – Wizard