Primeros pasos con Numpy: El array

Primeros pasos con Numpy: El array

¿Qué es Numpy?

Numpy ofrece una amplia gama de funciones para realizar operaciones matemáticas en matrices y matrices, lo que hace que la manipulación y análisis de datos sea eficiente. Esta biblioteca se ha convertido en un pilar fundamental en el ecosistema de Python para ciencia de datos y aprendizaje automático debido a su rendimiento optimizado y capacidad para trabajar con grandes conjuntos de datos rápidamente.

Una característica clave de Numpy es su estructura de datos principal: el array, que permite el almacenamiento de datos homogéneos y operaciones vectorizadas. Esto resulta en un código más limpio y eficiente en comparación con las listas estándar de Python. Además, Numpy proporciona funciones avanzadas para operaciones algebraicas, estadísticas y de transformación en estos arrays, convirtiéndolo en una herramienta versátil para tareas de análisis de datos complejas.

Otra ventaja significativa de Numpy es su integración perfecta con otras bibliotecas populares en el campo de la ciencia de datos, como Pandas, Scikit-learn y Matplotlib. Esta interoperabilidad facilita la construcción de flujos de trabajo completos, desde la manipulación inicial de datos hasta la visualización y modelado predictivo.

En el campo de la inteligencia artificial, Numpy se utiliza extensamente en la implementación de algoritmos de aprendizaje automático y redes neuronales. Su capacidad para realizar operaciones numéricas eficientes es esencial para el entrenamiento e inferencia de modelos complejos en el campo del aprendizaje profundo.

Numpy es mucho más que una simple biblioteca de manipulación de datos; es una herramienta poderosa que impulsa numerosas aplicaciones en ciencia de datos, inteligencia artificial y más allá. Su flexibilidad, rendimiento y amplia adopción en la comunidad de desarrolladores hacen de Numpy una herramienta indispensable en el arsenal de cualquiera involucrado en el análisis y procesamiento de datos con Python.

Mi intención con este blog es, sin duda, involucrar a tantas personas como sea posible en el ámbito científico de las ciencias de la computación, por lo que aprender Numpy es solo el comienzo de esta gran aventura.

Antes de Empezar:

Antes de sumergirnos en este emocionante tutorial de Numpy, quiero asegurarme de que estés listo para la jornada. He reunido detalles sobre los requisitos previos en el archivo README de nuestro repositorio en GitHub. Te recomiendo que le eches un vistazo para asegurarte de tener todo lo necesario para aprovechar al máximo esta experiencia de aprendizaje. ¡Estoy emocionado de tenerte a bordo!

Enlace al Repositorio de GitHub

¡Comencemos!

Como se mencionó anteriormente, Numpy es una forma de manejar datos en Python de manera más rápida y eficiente. Pero, ¿cuál es la diferencia en comparación con las estructuras de datos del lenguaje nativo?

Comencemos con lo básico: En Python, tenemos listas que pueden inicializarse de la siguiente manera: (Ejemplo Python - 1.1)

frutas = ["🍌", "🍒", "🍓", "🍏", "🍐"]  # Declara una lista

Puedes acceder a elementos directamente dentro de esa lista de la siguiente manera: (Ejemplo Python - 1.2)

print(frutas[0])  # Salida = "🍌"
print(frutas[1])  # Salida = "🍒"

¿Recuerdas el indexado? Es la forma en que los datos se almacenan dentro de esta estructura de datos en Python. El indexado comienza en 0. La siguiente imagen ilustra este concepto: (Recursos 1.1)

Indexado de listas en Python

También podemos acceder a los elementos de la siguiente manera: (Recursos 1.2)

Indexado negativo de listas en Python

print(frutas[-3])  # Salida = "🍓"
print(frutas[-2])  # Salida = "🍏"

Si imprimimos el tipo de datos de cualquier elemento dentro de la lista de Python, nos damos cuenta de que son de tipo cadena (Ejemplo Python - 1.3)

print(type(frutas[-2]))  # Salida = <class 'str'>

Ahora, declaremos una lista con elementos de diferentes tipos de datos, ¡incluyendo cadenas, flotantes, enteros y booleanos, por qué no? (Ejemplo Python - 1.3.1) e imprima el tipo de datos que contiene (Ejemplo Python - 1.3.2)

# 1.3 Tipos de datos
print(type(frutas[-2]))  # Salida = <class 'str'>

## 1.3.1 Lista con diferentes tipos de datos

mi_lista = [1, "1", "¡Hola!", 2.4, False]

# 1.3.2 Imprimir tipos de datos

for i in mi_lista:
    print(type(i))

'''
Salida:

<class 'int'>
<class 'str'>
<class 'str'>
<class 'float'>
<class 'bool'>
'''

Esta es la característica principal que diferenciará la eficiencia de numpy frente a las listas nativas de Python y la característica que hace que Numpy sea hasta 50 veces más rápido: la homogeneización de datos, lo que significa que todos los datos son del mismo tipo.

Tu Primer Array en Numpy

Antes de comenzar a escribir código, necesitamos importar numpy con la siguiente línea de código:

import numpy as np

La forma en que creamos arrays en Numpy es la siguiente: (Ejemplo Numpy- 1.1)

# 1.1 Declarar array

frutas = np.array(["🍌", "🍒", "🍓", "🍏", "🍉"])
print(frutas)  # ['🍌' '🍒' '🍓' '🍏' '🍉']

¡Simple, verdad? Simplemente agrega el método np.array() y pasa los elementos como parámetros.

También podemos pasar listas ya

creadas en Python como parámetros para transformarlas en un array (Ejemplo Numpy- 1.1.3)

# 1.1.2 Array from list

lista_del_mercado = ['Arroz', 'Pescado', 'Carne', 'Lechuga']

# 1.2.3 Lista a array

array_del_supermercado = np.array(lista_del_mercado)
print(array_del_supermercado)  # ['Arroz' 'Pescado' 'Carne' 'Lechuga']

Ahora que tienes un array en numpy, puedes usar la mayoría de los métodos para acceder a elementos como lo hiciste en las listas de Python, como acceder a elementos directamente por su índice (Ejemplo Numpy- 1.2.1)

# 1.2 Accediendo a datos por índice
print(array_del_supermercado[0])  # Salida: Arroz

También podemos aplicar el slicing, que es una forma de acceder a porciones específicas del array. (Ejemplo Numpy- 1.2.1 - 1.2.4)

# Slicing en Numpy

# 1.2.1 Acceder a un rango de elementos
subconjunto = array_del_supermercado[1:3]  # Obtendrás los elementos en las posiciones 1 y 2
print(subconjunto)  # Salida: ['Pescado', 'Carne']

# 1.2.2 Acceder desde el principio hasta una posición específica
subconjunto_inicio = array_del_supermercado[:2]  # Obtendrás los elementos en las posiciones 0 y 1
print(subconjunto_inicio)  # Salida: ['Arroz', 'Pescado']

# 1.2.3 Acceder desde una posición específica hasta el final
subconjunto_final = array_del_supermercado[2:]  # Obtendrás los elementos en las posiciones 2 y 3
print(subconjunto_final)  # Salida: ['Carne', 'Lechuga']

# 1.2.3 Acceder con un paso específico
subconjunto_paso = array_del_supermercado[::2]  # Obtendrás elementos con un paso de 2
print(subconjunto_paso)  # Salida: ['Arroz', 'Carne']

# 1.2.4 Acceder en orden inverso
orden_inverso = array_del_supermercado[::-1]  # Obtendrás los elementos en orden inverso
print(orden_inverso)  # Salida: ['Lechuga', 'Carne', 'Pescado', 'Arroz']

Numpy vs Python

Ahora sabes cómo crear arrays en Numpy, y espero que hayas comprendido la principal diferencia entre los dos. Aunque exploraremos temas más avanzados como la gestión de memoria y las operaciones de datos más adelante, me gustaría aclarar las diferencias entre una lista convencional de Python y un array de Numpy:

- Listas de Python:

  • Objetos Heterogéneos:
    • Las listas de Python pueden contener elementos de diferentes tipos, lo que hace que cada elemento sea un objeto Python completo con información adicional.
  • Redimensionamiento Dinámico:
    • Las listas de Python permiten un redimensionamiento dinámico, lo que significa que puedes agregar o eliminar elementos fácilmente.
  • Sobrecarga de Objetos:
    • Cada elemento de la lista lleva información adicional como tipo, referencia de objeto, etc. Esto puede resultar en una sobrecarga de memoria más alta en comparación con los arrays homogéneos.

- Arrays de NumPy:

  • Objetos Homogéneos:
    • Los arrays de NumPy son homogéneos, lo que significa que todos los elementos deben ser del mismo tipo. Esto permite que los datos se almacenen de manera más eficiente en la memoria.
  • Redimensionamiento Fijo:
    • Los arrays de NumPy tienen un tamaño fijo al crearse. Si necesitas redimensionar un array, típicamente se crea un nuevo array y se copian los datos al nuevo espacio.
  • Información de Tipo Eficiente:
    • NumPy almacena información de tipo de manera más eficiente que las listas de Python, ya que se utiliza un tipo de datos específico para todos los elementos.

¡Ya sabes cómo crear arrays en NumPy!

Con esto, hemos cubierto lo básico esencial de la inicialización de arrays en NumPy. Al comprender la importancia de mantener la homogeneidad de datos y utilizar eficientemente las funciones de NumPy, estás listo para explorar aún más las capacidades de esta poderosa biblioteca en tus proyectos de computación numérica.

¡Siéntete libre de visitar nuestro repositorio para acceder a ejemplos de código detallados, recursos adicionales y otras herramientas que mejorarán tu comprensión de NumPy. ¡Sigue explorando y aplicando estos conocimientos a tus proyectos! ¡Hasta la próxima!

Repositorio en GitHub