Hola Frank, Aveces somos impulsivos y sacamos concluciones erroneas. Decir que el for es lento en python y debe ser evitado , porque si lo reemplazas por el sum (un tipo del fold de programación funcional) va más rápido en el benchmarck no es correcto . Los bucles for no son un riesgo de ineficiencia por ellos mismos, es la forma en la que lo usamos que lo hacen ir más o menos rápido.
@@David123456789345 Python es un lenguaje de programación interpretado por la python virtual machine, Nunca programas en python o java si necesitas rapides. Lo haces en C. A controladores de motores los he programado en C. Es correcto que en python usas modulos precompilados hechos en C++ , con interfaces que permiten unir a python y usar esos modulos. Asi se trabaja por ejemplo, en GNU radio, en el procesamiento digital de señales. Usar esos modulos a cambio de codigo de python mejora la velocidad porque no usas la maquina virtual de python. Una funcion de alto nivel no es mejor que un bucle for por si sola. Los modulos de c++ nunca mejoraran el orden de tu algoritmo, En este caso encuentra una forma de reducir el costo depasar de un loop invariant a otro.Pero.. ¿El for debe ser evitado? mi respuesta es no. Si busco velocidad python debe ser evitado.
@@franciscollaryora2032 me imagino que debe ser node xq se usa con react que se especializa en componentes rapidos.. pero no se quiero a opinion tuya, parece que sabes mas que yo x lejos
@@fabiananavarro5556 Para backend use el lenguaje que le sea más comodo. Creo que Go es el más rapido. Pero si nodejs, java o python es su mejor herramienta usela .
Hola, primero que nada muy buen video, felicidades :). A modo de sugerencia, creo que sería interesante explicar la diferencia matemática de las operaciones mostradas (complejidad de los algoritmos), un bucle for tiene una complejidad muy diferente a los algoritmos utilizados por numpy o otras librerías. Al estudiar la algorítmica, notamos que la diferencia de tiempo entre for y las otras funciones no se debe al lenguaje en el que están escritas, sino, que se deben a la complejidad del algoritmo. En la documentación oficial de numpy o otras librerías como scipy especifica que algoritmo usa para resolver las operaciones (de hecho en algunas funciones como scipy.optimize.scalar_root, se puede elegir entre que algoritmo usar dependiendo de lo que necesites calcular), un saludo y felicidades por el video 😁
Para este caso no es verdad que sea por algoritmia, no existe una complejidad menor para calcular el promedio que O(n) es imposible algorítmicamente, ya que el promedio es la suma de todas las partes sobre el tamaño, necesitas todas las partes ósea inevitablemente un for (así sea interno). La respuesta está en algo llamado JIT y la definición de interpretado y compilado
En mi humilde opinión creo que no estás considerando otros factores. Por ejemplo, hasta donde sé, python está desarrollado en C. Y en C, usando OMP se reduce considerablemente el tiempo de ejecución, por ejemplo en la suma de los valores de un rango utilizando #pragma omp reduce. Pero esto no quiere decir que de por si el for incremente considerablemente el tiempo de ejecución, sino que estás realizando una comparación desigual.
Excelente infomación. Estaría increíble un video o serie donde muestres estas optimizaciones que ya existen en las diferentes librerías disponibles, como los if, funciones lambda, etc. De 0 a PRO con el mejor código optimizado. Gracias por el aporte, saludos.
Parece bueno los ejemplo, pero no lo son, ya que usastes cosas numericas, no hay ejemplo de str, o de diccionarios, claro eso numpy lo hace bien al ser numeros.
Yo los uso, pero no tengo ni idea cuando se trata de usar uno dentro de otro, por lo que tengo que optar por la versión original. Aunque bueno hay ocasiones en que los loops necesitan tener muchas cosas y ahí no son tan combeniente s usar los comprimidos tampoco.
El resultado del bucle con las funciones numpy es impresionante! He leído también que se puede incrementar la velocidad en IF's/ELSE's. Alguna solución? Gracias!
Una duda, soy nuevo en python, si necesito "depurar" una lista de objetos traído de pymongo por ej: For doc in db.user.find({}): If user not in users: ..... Cuál sería la mejor manera para hacer dicho ciclo? Por qué veo que cuando me regresa muchos documentos se tarda más de 4 segundos mi endpoint y pues es mucho tiempo para la respuesta, gracias, ojalá alguien me pueda ayudar 🙌
Si, justo el detalle está en identificar qué cosas ya están optimizadas por las librerías disponibles. El principio para resolver un problema esta bien hacerlo así, con un simple “for” como nos lo enseñan en el colegio para después optimizar.
Cosas que deberias de hacer al inicio: 1.Tratar de que tus articulos sean publicadion en publicaciones activas con una buena cantidad de seguidores. 2. Leer mucho 3. "Copiar" a gente exitosa en la plataforma
"Click bait", un nombre como "for vs numpy" hubiese evitado perder mi tiempo. Es un hecho que python es lento, pensé que había una nueva función similar a for y que hacía lo mismo y mejor.
A mi me gustó por que no sabia que se podrían ahorrar bucles en ciertas operaciones sencillas. Lo que sí entiendo es que el video es click bait y te haga pensar que te va a mostrar un método que va a funcionar para todos los casos y que por eso la gente se sienta decepcionada.