Fundamentos del análisis de datos de NumPy: explicación detallada de las funciones de NumPy y la comparación de la estructura de datos integrada de Python

Tabla de contenido

prefacio

Primero, la diferencia entre la estructura integrada de Numpy y Python

2. Comparación de rendimiento operativo

3. La arquitectura subyacente

Preste atención, evite perderse, si hay algún error, deje un mensaje para recibir asesoramiento, muchas gracias.



prefacio

Como uno de los tres gigantes del análisis de datos, Pandas, matplotlib y NumPy, es necesario dar una explicación separada para la cara. Los escenarios de aplicación de NumPy son muy amplios y muchas funciones de Pandas se convierten en estructuras de datos de matriz NumPy. Se usa incluso con más frecuencia que Pandas en el aprendizaje automático, el aprendizaje profundo y algunas operaciones de procesamiento de datos. Además, NumPy es poderoso y conveniente de usar, y admite una variedad de operaciones complejas. Usualmente uso NumPy en mis Pandas y algunos artículos de aprendizaje automático, pero el contenido del blog no explica el funcionamiento de NumPy en detalle, ni registra algunas respuestas de funciones específicas sobre el funcionamiento de NumPy. Es realmente inapropiado para un blogger como yo que persigue las necesidades de un servicio de ventanilla única, por lo que llenaré el pozo viejo y publicaré una nueva columna básica de análisis de datos Numpy de la serie de aprendizaje rápido de un texto.

Esta serie de artículos se incluirá en mi columna uno, una serie de fundamentos de análisis de datos NumPy de aprendizaje rápido, que básicamente cubre el uso de datos NumPy para analizar negocios diarios y análisis de modelos matemáticos de rutina y operaciones complejas. Dedicaré mucho tiempo y pensaré en crear desde operaciones de matrices básicas hasta operaciones complejas como el procesamiento de matrices y características vectoriales, así como funciones comunes profesionales de NumPy. Si necesita participar en análisis de datos o desarrollo de datos, modelado matemático, Amigos de ingeniería de Python recomienda suscribirse a la columna, y aprenderá los conocimientos más prácticos y comunes en la primera vez. Este blog es largo y vale la pena leerlo y practicarlo. Elegiré la mejor parte y hablaré sobre la práctica en detalle. Los bloggers mantendrán las publicaciones del blog durante mucho tiempo. Si tiene algún error o duda, puede señalarlo en el área de comentarios. Gracias por su apoyo.


Primero, la diferencia entre la estructura integrada de Numpy y Python

Una computación científica implementada en python, que incluye:

1. Un poderoso objeto de matriz N-dimensional Array;

2. Una biblioteca de funciones relativamente madura;

3. Toolkit para integrar código C/C++ y Fortran;

4. Álgebra lineal práctica, transformada de Fourier y funciones generadoras de números aleatorios.

Numpy y el paquete de operación de matriz dispersa scipy son más convenientes de usar juntos y más completos con el análisis de datos de Pandas. NumPy es el paquete básico para computación científica en Python. Es una biblioteca de Python que proporciona objetos de matriz multidimensional, varios objetos derivados (como matrices y matrices enmascaradas) y una variedad de rutinas para operaciones rápidas en matrices, incluidas matemáticas, lógica, operaciones de forma, clasificación, selección, E/S, transformada discreta de Fourier, álgebra lineal básica, operaciones estadísticas básicas, simulación estocástica, etc.

El núcleo del paquete NumPy es el objeto ndarray. Esto encapsula matrices n-dimensionales de tipos de datos homogéneos y, para mejorar el rendimiento, muchas operaciones se realizan en código compilado. Hay varias diferencias importantes entre las matrices NumPy y las secuencias estándar de Python:

  • A diferencia de las listas de Python (que pueden crecer dinámicamente), las matrices NumPy tienen un tamaño fijo cuando se crean. Cambiar el tamaño de una matriz estándar creará una nueva matriz y eliminará la matriz original.
  • Todos los elementos de una matriz NumPy deben ser del mismo tipo de datos y, por lo tanto, del mismo tamaño de memoria. La excepción es: puede haber matrices de objetos (Python, incluido NumPy), lo que permite matrices de elementos de diferentes tamaños.
  • Las matrices NumPy facilitan operaciones matemáticas avanzadas y de otro tipo en grandes cantidades de datos. En general, tales operaciones se realizan de manera más eficiente y con menos código que con las secuencias integradas de Python.
  • Un número creciente de paquetes científicos y matemáticos basados ​​en Python utilizan matrices NumPy; si bien generalmente admiten la entrada de secuencias de Python, convierten dicha entrada en matrices NumPy antes del procesamiento y, por lo general, generan matrices NumPy. En otras palabras, para usar de manera efectiva muchos (o incluso la mayoría) del software científico/matemático actual basado en Python, no es suficiente saber cómo usar los tipos de secuencia integrados de Python, también necesita saber cómo usar las matrices NumPy.

2. Comparación de rendimiento operativo

El tamaño y la velocidad de la secuencia son especialmente importantes en la computación científica. Como ejemplo simple, considere el caso de multiplicar cada elemento en una secuencia unidimensional con el elemento correspondiente en otra secuencia de la misma longitud. Si los datos se almacenan en dos listas de Python a y b, podemos iterar sobre cada elemento:

a=[1,2,3,4]
b=[5,6,7,8]
c = []
for i in range(len(a)):
    c.append(a[i]*b[i])

Pero si tanto a como b contienen millones de números, el bucle en Python no es tan eficiente como en C. La misma tarea se puede hacer más rápido en C escribiendo (ignorando la declaración e inicialización de variables, la asignación de memoria, etc. para mayor claridad):

for (i = 0; i < rows; i++) {
  c[i] = a[i]*b[i];
}

 Sin embargo, es muy complicado cuando hay matrices multidimensionales, especialmente la operación de agregación en matrices multidimensionales aumentará en gran medida la complejidad y la complejidad del tiempo del código.

for (i = 0; i < rows; i++) {
  for (j = 0; j < columns; j++) {
    c[i][j] = a[i][j]*b[i][j];
  }
}

Pero NumPy está optimizado en base a las dos formas anteriores, su código subyacente está escrito en lenguaje C y el método de uso es extremadamente simple: cuando se trata de ndarray, la operación por elementos es el "modo predeterminado", pero la operación por elementos se realiza mediante código C precompilado Ejecución rápida:

import numpy as np
a=np.array([1,2,3,4])
b=np.array([5,6,7,8])
c=a*b

 Haga lo que hacen los ejemplos anteriores a una velocidad cercana a C, con la simplicidad del código basado en Python. Usar NumPy es aún más simple. El último ejemplo ilustra dos características de NumPy que subyacen a sus poderosas capacidades: vectorización y transmisión.

3. La arquitectura subyacente

La vectorización describe la ausencia de bucles, índices, etc. explícitos en el código, lo que, por supuesto, sucede "detrás de escena" en código C optimizado y precompilado. El código vectorizado tiene muchas ventajas, entre ellas:

  • El código vectorizado es más limpio y más fácil de leer
  • Menos líneas de código generalmente significan menos errores
  • El código está más cerca de la notación matemática estándar (a menudo es más fácil codificar estructuras matemáticas correctamente)
  • La vectorización produce más código "Pythonic". Sin la vectorización, nuestro código estaría lleno de bucles ineficientes y difíciles de leer.

Broadcasting es el término utilizado para describir el comportamiento implícito elemento por elemento de las operaciones; en general, en NumPy, todas las operaciones, no solo las operaciones aritméticas, sino también las lógicas, los bits, las funciones, etc., son la forma en que se comportan, es decir, transmisión. Además, en el ejemplo anterior, a y b pueden ser matrices multidimensionales de la misma forma, o un escalar y una matriz, o incluso dos matrices con formas diferentes, siempre que la matriz más pequeña se pueda "expandir" a la más grande. La forma de la matriz, lo que hace que la transmisión resultante no sea ambigua. Para obtener "reglas" detalladas de transmisión, consulte:

Emisión — NumPy v1.24.dev0 Manual
 

NumPy es totalmente compatible con un enfoque orientado a objetos, comenzando nuevamente con ndarray. Por ejemplo, ndarray es una clase con muchos métodos y propiedades. Muchos de sus métodos se reflejan en funciones en el espacio de nombres más externo de NumPy, lo que permite a los programadores codificar en cualquier paradigma que prefieran. Esta flexibilidad hace que el dialecto de matriz NumPy y la clase NumPy-ndarray sean el lenguaje de facto para el intercambio de datos multidimensionales que se usa en Python.

Preste atención, evite perderse, si hay algún error, deje un mensaje para recibir asesoramiento, muchas gracias.

Eso es todo por este tema. Estoy atascado, si tiene alguna pregunta, no dude en dejar un mensaje para discutir, nos vemos en la próxima edición.


Supongo que te gusta

Origin blog.csdn.net/master_hunter/article/details/127118157
Recomendado
Clasificación