Guía de matrices en Python

Guía de matrices en Python

Introducción

Imagina que tienes una lista de reproducción de tus canciones favoritas en tu teléfono. Esta lista de reproducción es una lista donde se coloca cada canción en un orden específico. Puedes reproducir la primera canción, pasar a la segunda, pasar a la quinta, etc. Esta lista de reproducción se parece mucho a una matriz en la programación de computadoras.

Las matrices son una de las estructuras de datos más fundamentales y más utilizadas.

En esencia, una matriz es una forma estructurada de almacenar múltiples elementos (como números, caracteres o incluso otras matrices) en un orden específico, y puede acceder, modificar o eliminar rápidamente cualquier elemento si conoce su posición (índice).

En esta guía, le brindaremos una descripción general completa de la estructura de datos de la matriz. En primer lugar, veremos qué son los arrays y cuáles son sus principales características. Luego realizaremos la transición al mundo de Python y exploraremos cómo se implementan, manipulan y aplican las matrices en escenarios del mundo real.

Comprender la estructura de datos de la matriz

Las matrices se encuentran entre las estructuras de datos más antiguas y fundamentales utilizadas en informática y programación. Su simplicidad, combinada con su eficiencia en determinadas operaciones, los convierte en un tema básico para cualquiera que se adentre en el ámbito de la gestión y manipulación de datos.

Una matriz es una colección de elementos, generalmente del tipo el mismo tipo, guardado en ubicaciones de memoria contiguas.

Este almacenamiento contiguo permite que las matrices proporcionen acceso en tiempo constante a cualquier elemento, dado su índice. Cada elemento de una matriz se llama elementos, y la posición de un elemento en la matriz está definida por su índice, que por lo general comienza desde cero.

Por ejemplo, considere una matriz de números enteros: [10, 20, 30, 40, 50]. Aquí, el elemento 20 tiene un índice de 1:

indexación de matrices de Python

Hay múltiples ventajas de utilizar matrices para almacenar nuestros datos. Por ejemplo, debido a su diseño de memoria, las matrices permiten O (1) Complejidad temporal (constante) al acceder a un elemento por su índice. Esto es particularmente beneficioso cuando necesitamos acceso aleatorio a elementos. Además, las matrices se almacenan en ubicaciones de memoria contiguas, lo que puede conducir a una mejor localidad de caché y mejoras generales de rendimiento en ciertas operaciones. Otra ventaja notable de usar matrices es que, dado que las matrices tienen un tamaño fijo una vez declaradas, es más fácil administrar la memoria y evitar desbordamientos inesperados o errores de falta de memoria.

Note: Las matrices son especialmente útiles en escenarios donde el El tamaño de la colección se conoce de antemano y permanece constante., o donde el acceso aleatorio es más frecuente que las inserciones y eliminaciones.

Por otro lado, los arreglos vienen con su propio conjunto de limitaciones. Una de las principales limitaciones de los arreglos tradicionales es su tamaño fijo. Una vez que se crea una matriz, su tamaño no se puede cambiar. Esto puede provocar problemas como el desperdicio de memoria (si la matriz es demasiado grande) o la necesidad de cambiar el tamaño (si la matriz es demasiado pequeña). Además de eso, insertar o eliminar un elemento en medio de una matriz requiere el desplazamiento de elementos, lo que lleva a O (n) Complejidad temporal para estas operaciones.

Para resumir todo esto, ilustraremos las características principales de los arreglos usando el ejemplo de lista de reproducción de canciones del comienzo de esta guía. Una matriz es una estructura de datos que:

  • Está indexado: Así como cada canción de tu lista de reproducción tiene un número (1, 2, 3,…), cada elemento de una matriz tiene un índice. Pero, en la mayoría de los lenguajes de programación, el índice comienza en 0. Entonces, el primer elemento está en el índice 0, el segundo en el índice 1, y así sucesivamente.

  • Tiene tamaño fijo: Cuando creas una lista de reproducción para, digamos, 10 canciones, no puedes agregar una undécima canción sin eliminar una primero. De manera similar, las matrices tienen un tamaño fijo. Una vez que crea una matriz de cierto tamaño, no puede agregar más elementos que su capacidad.

  • es homogéneo: Todas las canciones de tu lista de reproducción son pistas de música. De manera similar, todos los elementos de una matriz son del mismo tipo. Si tiene una matriz de números enteros, no puede almacenar de repente una cadena de texto en ella.

  • Tiene acceso directo: Si desea escuchar la séptima canción de su lista de reproducción, puede saltar directamente a ella. De manera similar, con las matrices, puedes acceder instantáneamente a cualquier elemento si conoces su índice.

  • Memoria contigua: Esto es un poco más técnico. Cuando se crea una matriz en la memoria de una computadora, ocupa un bloque continuo de memoria. Piense en ello como una fila de casilleros adyacentes en la escuela. Cada casillero está al lado del otro, sin espacios entre ellos.

Python y matrices

Python, conocido por su flexibilidad y facilidad de uso, ofrece múltiples formas de trabajar con matrices. Si bien Python no tiene una estructura de datos de matriz nativa como otros lenguajes, proporciona alternativas poderosas que pueden funcionar de manera similar e incluso ofrecer capacidades extendidas.

A primera vista, La lista de Python Puede parecer sinónimo de una matriz, pero existen diferencias y matices sutiles a considerar:

Lista Formación
Una estructura de datos Python incorporada No son nativos en Python: provienen del módulo `array`
Tamaño dinámico Tamaño fijo (predefinido)
Puede contener elementos de diferentes tipos de datos Mantener artículos del mismo tipo.
Proporcionar una variedad de métodos integrados para la manipulación. Necesidad de importar módulos externos.
O (1) complejidad temporal para las operaciones de acceso O (1) complejidad temporal para las operaciones de acceso
Consume más memoria Memoria más eficiente

Al observar esta tabla, resulta natural preguntar: "¿Cuándo usar cuál?". Bueno, si necesita una colección que pueda crecer o reducirse dinámicamente y que pueda contener tipos de datos mixtos, la lista de Python es el camino a seguir. Sin embargo, para escenarios que requieren una colección más eficiente en memoria con elementos del mismo tipo, podría considerar usar Python array módulo o bibliotecas externas como NumPy.

La matriz Módulo en Python

Cuando la mayoría de los desarrolladores piensan en matrices en Python, a menudo piensan de forma predeterminada en listas. Sin embargo, Python ofrece una estructura de matriz más especializada a través de su función integrada. array módulo. Este módulo proporciona un almacenamiento eficiente en el espacio de tipos de datos básicos de estilo C en Python.

Si bien las listas de Python son increíblemente versátiles y pueden almacenar cualquier tipo de objeto, a veces pueden ser excesivas, especialmente cuando solo necesitas almacenar una colección de tipos de datos básicos, como números enteros o flotantes. El array El módulo proporciona una manera de crear matrices que son más eficientes en memoria que las listas para tipos de datos específicos.

Crear una matriz

Para utilizar el array módulo, primero debe importarlo:

from array import array

Una vez importado, puede crear una matriz usando el array() constructor:

arr = array('i', [1, 2, 3, 4, 5])
print(arr)

Aquí el 'i' El argumento indica que la matriz almacenará firmada. enteros. Hay varios otros códigos de tipo disponibles, como 'f' para flotadores y 'd' para dobles.

Acceso y modificación de elementos

Puede acceder y modificar elementos en una matriz tal como lo haría con una lista:

print(arr[2]) 

Y ahora, modifiquemos el elemento cambiando su valor a 6:

arr[2] = 6
print(arr) 

Métodos de matriz

La array El módulo proporciona varios métodos para manipular matrices:

  • append() – Agrega un elemento al final de la matriz:

    arr.append(7)
    print(arr) 
  • extend() – Agrega elementos iterables al final:

    arr.extend([8, 9])
    print(arr) 
  • pop() – Elimina y devuelve el elemento a la posición dada:

    arr.pop(2)
    print(arr) 
  • remove(): Elimina la primera aparición del valor especificado:

    arr.remove(2)
    print(arr) 
  • reverse(): Invierte el orden de la matriz:

    arr.reverse()
    print(arr) 

Nota: Hay más métodos de los que enumeramos aquí. Referirse a documentación oficial de Python para ver una lista de todos los métodos disponibles en el array módulo.

Aunque se cree que array El módulo ofrece una forma más eficiente de almacenar tipos de datos básicos, es esencial recordar su limitaciones. A diferencia de las listas, las matrices son homogéneo. Esto significa que todos los elementos de la matriz deben ser del mismo tipo. Además, sólo puedes almacenar tipos de datos básicos de estilo C en matrices. Si necesita almacenar objetos personalizados u otros tipos de Python, necesitará usar una lista u otra estructura de datos.

matrices numéricas

NumPy, abreviatura de Numerical Python, es un paquete fundamental para cálculos numéricos en Python. Una de sus principales características es su potente Objeto de matriz N-dimensional, que ofrece operaciones rápidas en matrices, incluidas operaciones matemáticas, lógicas, manipulación de formas y más.

Las matrices NumPy son más versátiles que las integradas de Python array módulo y son un elemento básico en proyectos de ciencia de datos y aprendizaje automático.

¿Por qué utilizar matrices NumPy?

Lo primero que me viene a la mente es actuación. Las matrices NumPy se implementan en C y permiten un almacenamiento de memoria eficiente y operaciones más rápidas debido a algoritmos optimizados y los beneficios del almacenamiento de memoria contigua.

Si bien las listas y matrices integradas de Python son unidimensionales, las matrices NumPy pueden ser multidimensional, haciéndolos ideales para representar matrices o tensores.

Consulte nuestra guía práctica y práctica para aprender Git, con las mejores prácticas, los estándares aceptados por la industria y la hoja de trucos incluida. Deja de buscar en Google los comandos de Git y, de hecho, aprenden ella!

Finalmente, NumPy proporciona una amplia gama de funciones para operar en estas matrices, desde aritmética básica hasta operaciones matemáticas avanzadas, remodelación, división y más.

Nota: Cuando conoce el tamaño de los datos de antemano, la preasignación de memoria para matrices (especialmente en NumPy) puede generar mejoras en el rendimiento.

Creando una matriz NumPy

Para usar NumPy, primero debe instalarlo (pip install numpy) y luego importarlo:

import numpy as np

Una vez importado, puede crear una matriz NumPy usando el array() función:

arr = np.array([1, 2, 3, 4, 5])
print(arr) 

También puedes crear matrices multidimensionales:

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)

Esto nos dará:

[[1 2 3] [4 5 6] [7 8 9]]

Además de estas formas básicas en las que podemos crear matrices, NumPy nos proporciona otras formas inteligentes en las que podemos crear matrices. Uno de los cuales es el arange() método. Crea matrices con valores que se incrementan regularmente:

arr = np.arange(10)
print(arr) 

Otro es el linspace() método, que crea matrices con un número específico de elementos, espaciados igualmente entre los valores iniciales y finales especificados:

even_space = np.linspace(0, 1, 5)
print(even_space) 

Acceso y modificación de elementos

Acceder y modificar elementos en una matriz NumPy es intuitivo:

print(arr[2]) arr[2] = 6
print(arr) 

Haciendo prácticamente lo mismo para matrices multidimensionales:

print(matrix[1, 2]) matrix[1, 2] = 10
print(matrix)

Cambiará el valor del elemento en la segunda fila (índice 1) y la tercera columna (índice 2):

[[1 2 3] [4 5 20] [7 8 9]]

Cambiar la forma de una matriz

NumPy ofrece muchas funciones y métodos para manipular y operar en matrices. Por ejemplo, puedes utilizar el reshape() método para cambiar la forma de una matriz. Digamos que tenemos una matriz simple:

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print("Original Array:")
print(arr) 

Y queremos remodelarlo a una matriz de 3×4. Todo lo que necesitas hacer es usar el reshape() método con las dimensiones deseadas pasadas como argumentos:


reshaped_arr = arr.reshape(3, 4)
print("Reshaped Array (3x4):")
print(reshaped_arr)

Esto resultará en:

Reshaped Array (3x4):
[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]

Multiplicación de matrices

La numpy.dot() el método se utiliza para multiplicación de matrices. Devuelve el producto escalar de dos matrices. Para matrices unidimensionales, es el producto Interno de las matrices. Para matrices bidimensionales, es equivalente a multiplicación de matrices, y para ND, es un producto de suma sobre el último eje de la primera matriz y el penúltimo de la segunda matriz.

Vamos a ver cómo funciona. Primero, calculemos el producto escalar de dos matrices 1-D (el producto interno de los vectores):

import numpy as np vec1 = np.array([1, 2, 3])
vec2 = np.array([4, 5, 6])
dot_product_1d = np.dot(vec1, vec2) print("Dot product of two 1-D arrays:")
print(dot_product_1d) 

Esto resultará en:

Dot product of two 1-D arrays:
32

32 es, de hecho, el producto interno de las dos matrices – (14 + 25+3*6). A continuación, podemos realizar la multiplicación de matrices de dos matrices 2-D:


mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[2, 0], [1, 3]])
matrix_product = np.dot(mat1, mat2) print("Matrix multiplication of two 2-D arrays:")
print(matrix_product) 

Lo cual nos dará:

Matrix multiplication of two 2-D arrays:
[[ 4 6] [10 12]]

Las matrices NumPy son un avance significativo con respecto a las listas integradas de Python y la array módulo, especialmente para cálculos científicos y matemáticos. Su eficiencia, combinada con la rica funcionalidad proporcionada por la biblioteca NumPy, los convierte en una herramienta indispensable para cualquiera que busque realizar operaciones numéricas en Python.

Conclusión

Los arreglos, piedra angular de la informática y la programación, han demostrado su valor una y otra vez en diversas aplicaciones y dominios. En Python, esta estructura de datos fundamental, a través de sus diversas encarnaciones como listas, la array El módulo y las potentes matrices NumPy ofrecen a los desarrolladores una combinación de eficiencia, versatilidad y simplicidad.

A lo largo de esta guía, hemos viajado desde los conceptos fundamentales de las matrices hasta sus aplicaciones prácticas en Python. Hemos visto cómo las matrices, con su naturaleza de memoria contigua, proporcionan tiempos de acceso rápidos y cómo las listas dinámicas de Python aportan una capa adicional de flexibilidad. También hemos profundizado en el mundo especializado de NumPy, donde las matrices se transforman en poderosas herramientas para el cálculo numérico.

Sello de tiempo:

Mas de Abuso de pila