我对于何时使用numpy的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)
在这里,我甚至使用了一个内置的numpy函数np.sum
,然而计算Python循环中的sums1
仅需不到400毫秒,而计算sums2
(apply_along_axis
)需要超过2000毫秒(在Windows上使用NumPy 1.6.1)。作为进一步的比较,R的rowMeans
函数通常可以在不到20毫秒的时间内完成此操作(我很确定它正在调用C代码),而类似的R函数apply()
则可以在约600毫秒内完成。