NumPy: por qué un bucle de Python es caro
Python es un lenguaje lento para trabajos numéricos. Cada iteración del bucle: el intérprete verifica los tipos, encuentra objetos en la memoria, ejecuta una operación y devuelve un nuevo objeto. En un millón de elementos eso son cientos de milisegundos. NumPy hace lo mismo en milisegundos, porque bajo el capó está compilado en C trabajando en un bloque contiguo de memoria escrita.