varianza matriz matrices libreria graficas estadistica crear correlación python arrays numpy

python - matriz - scipy



¿Por qué las matrices NumPy son tan rápidas? (4)

Aún tienes bucles pero están hechos en c. Numpy se basa en Atlas, que es una biblioteca para operaciones de álgebra lineal.

http://math-atlas.sourceforge.net/

Cuando enfrente una gran computación, ejecutará pruebas usando varias implementaciones para descubrir cuál es la más rápida en nuestra computadora en este momento. Con algunas construcciones numpy, las comutaciones se pueden paralelizar en múltiples cpus. Por lo tanto, tendrá una ejecución c altamente optimizada en bloques de memoria continua.

Acabo de cambiar un programa que estoy escribiendo para mantener mis datos como matrices numpy ya que tenía problemas de rendimiento, y la diferencia fue increíble. Originalmente tomó 30 minutos para ejecutarse y ahora demora 2.5 segundos.

Me preguntaba cómo lo hace. Supongo que es así porque elimina la necesidad for bucles pero, más allá de eso, estoy perplejo.


Las matrices numeradas son extremadamente similares a las matrices "normales" como las de c. Tenga en cuenta que cada elemento debe ser del mismo tipo. La aceleración es excelente porque puede aprovechar la captación previa y puede acceder instantáneamente a cualquier elemento en la matriz por su índice.


Las matrices numeradas son matrices densamente compactas de tipo homogéneo. Las listas de Python, por el contrario, son matrices de punteros a objetos, incluso cuando todos ellos son del mismo tipo. Entonces, obtienes los beneficios de la localidad de referencia .

Además, muchas operaciones de Numpy se implementan en C, lo que evita el costo general de los bucles en Python, la indirección del puntero y la comprobación del tipo dinámico por elemento. El aumento de velocidad depende de las operaciones que esté realizando, pero algunos órdenes de magnitud no son infrecuentes en los programas de procesamiento de números.


numpy arrays son estructuras de datos especializadas. Esto significa que no solo obtendrá los beneficios de una representación eficiente en memoria, sino también implementaciones especializadas eficientes.

Por ejemplo, si está sumando dos matrices, la adición se realizará con las operaciones especializadas de vectores de la CPU , en lugar de llamar a la implementación python de la suma int en un bucle.