Estoy confundido acerca de cuándo la función numpy.apply_along_axis()
de numpy superará a un simple bucle de Python. Por ejemplo, consideremos el caso de una matriz con muchas filas, y desea calcular la suma de cada fila:¿Por qué numpy.apply_along_axis parece ser más lento que el bucle de 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)
Aquí aún estoy usando una función integrada de numpy, np.sum
, y sin embargo el cálculo sums1
(Ciclo de Python) toma menos de 400 ms mientras calcula sums2
(apply_along_axis
) toma más de 2000ms (NumPy 1.6.1 en Windows). A modo de comparación, la función rowMeans de R a menudo puede hacer esto en menos de 20 ms (estoy bastante seguro de que está llamando al código C) mientras que la función R similar apply()
puede hacerlo en aproximadamente 600 ms.
Desafortunadamente aplicar a lo largo del eje parece ser una opción para tareas no relacionadas con la velocidad solamente. – Wizard