¿Cuáles son las diferencias en el rendimiento y el comportamiento entre el uso de la función nativa sum
de Python y el numpy.sum
de NumPy? sum
funciona en las matrices de NumPy y numpy.sum
funciona en las listas de Python y ambos devuelven el mismo resultado efectivo (no han probado casos extremos como el desbordamiento) pero diferentes tipos.suma de Python contra Numpy.sum de NumPy
>>> import numpy as np
>>> np_a = np.array(range(5))
>>> np_a
array([0, 1, 2, 3, 4])
>>> type(np_a)
<class 'numpy.ndarray')
>>> py_a = list(range(5))
>>> py_a
[0, 1, 2, 3, 4]
>>> type(py_a)
<class 'list'>
# The numerical answer (10) is the same for the following sums:
>>> type(np.sum(np_a))
<class 'numpy.int32'>
>>> type(sum(np_a))
<class 'numpy.int32'>
>>> type(np.sum(py_a))
<class 'numpy.int32'>
>>> type(sum(py_a))
<class 'int'>
Editar: Creo que mi pregunta práctica que aquí se podría utilizar numpy.sum
en una lista de números enteros Python sea más rápido que el uso de Python propia sum
?
Además, ¿cuáles son las implicaciones (incluido el rendimiento) del uso de un número entero de Python frente a un escalador numpy.int32
? Por ejemplo, para a += 1
, ¿existe una diferencia de comportamiento o rendimiento si el tipo de a
es un número entero de Python o numpy.int32
? Tengo curiosidad por saber si es más rápido usar un tipo de datos escalar NumPy como numpy.int32
para un valor que se agrega o resta mucho en el código de Python.
Para aclaración, estoy trabajando en una simulación bioinformática que consiste en parte en colapsar numpy.ndarray
s multidimensional en sumas escalares individuales que luego se procesan adicionalmente. Estoy usando Python 3.2 y NumPy 1.6.
¡Gracias de antemano!
+1, pero ¿no tienes estos resultados al revés? – dawg
@drewk, sí, los tuve al revés. ¡Gracias por señalar esto! Fijo. – Akavall
Tiene razón cuando 'np.sum' es más rápido cuando se usa' np.array'. Pero si mide 'np.sum (np.array object)' y 'sum (list object)', ambos funcionan casi por igual. – xyres