¿Cómo declaro una matriz en Python?

8 minutos de lectura

¿Cómo declaro una matriz en Pitón?

  • @Glenn Maynard: probablemente porque en los lenguajes tipo C, las matrices tienen una longitud fija, mientras que las listas de Python no lo son. Es más como un vector STL en C++ o ArrayList en Java.

    – MAK

    3 de octubre de 2009 a las 19:36

  • Se llama lista, porque es una lista. [A(), 1, ‘Foo’, u’öäöäö’, 67L, 5.6]. Una lista. Una matriz es “una disposición de elementos en direcciones igualmente espaciadas en la memoria de la computadora” (wikipedia).

    – Lennart Regebro

    3 oct 2009 a las 19:40

  • Además, las listas pueden tener contenidos heterogéneos, mientras que las matrices de otros idiomas normalmente requieren que todos los elementos sean del mismo tipo.

    –Ned Batchelder

    3 oct 2009 a las 19:40

  • Nada sobre el término universalmente entendido “matriz” sugiere una longitud fija ni nada sobre el contenido; esas son solo limitaciones de la implementación particular de matrices de C. Las listas de Python están igualmente espaciadas (punteros a objetos, internamente), o bien __getitem__ no sería O(1).

    –Glenn Maynard

    3 de octubre de 2009 a las 20:13

  • @Glenn, de en.wikipedia.org/wiki/Array_data_structure: “los elementos de una estructura de datos de matriz deben tener el mismo tamaño” (verdadero para las matrices de Python, no es cierto para las listas de Python) y “conjunto de tuplas de índice válidas y las direcciones de los elementos (y, por lo tanto, la fórmula de direccionamiento de elementos) generalmente se fijan mientras la matriz está en uso” (no es cierto en Python ni para la lista ni para la matriz).

    – Alex Martelli

    3 de octubre de 2009 a las 22:27

avatar de usuario
sepp2k

variable = []

Ahora variable se refiere a una lista vacía*.

Por supuesto, esto es una asignación, no una declaración. No hay forma de decir en Python “esta variable nunca debe referirse a otra cosa que no sea una lista”, ya que Python se escribe dinámicamente.


*El tipo de Python incorporado predeterminado se llama lista, no una matriz. Es un contenedor ordenado de longitud arbitraria que puede contener una colección heterogénea de objetos (sus tipos no importan y pueden mezclarse libremente). Esto no debe confundirse con el array móduloque ofrece un tipo más cercano al C array escribe; los contenidos deben ser homogéneos (todos del mismo tipo), pero la extensión sigue siendo dinámica.

  • ¿Sería posible inicializar el contenido de la matriz, como en JavaScript? (por ejemplo, como variable = ["Hi", "Hello"];?)

    –Anderson Green

    18 de marzo de 2013 a las 4:31


  • Entonces, ¿cómo declararía una matriz multidimensional (por ejemplo, una matriz 2D?)

    –Anderson Green

    5 de abril de 2013 a las 1:45

  • @AndersonGreen Como dije, no existe una declaración de variable en Python. Crearía una lista multidimensional tomando una lista vacía y colocando otras listas dentro de ella o, si las dimensiones de la lista se conocen en el momento de la escritura, podría simplemente escribirla como un literal como este: my_2x2_list = [[a, b], [c, d]]. Dependiendo de para qué necesite arreglos multidimensionales, también podría considerar usar numpyque define los tipos de matrices para matrices multidimensionales, homogéneas y no empaquetadas que pueden ser mucho más eficientes cuando corresponda, por lo que son preferibles para los cálculos numéricos.

    – sepp2k

    5 de abril de 2013 a las 9:43

  • @IfanIqbal Sí, si contiene al menos un elemento, puede hacerlo.

    – sepp2k

    9 oct 2013 a las 23:34

  • Se conoce formalmente como lista.

    – Arulx Z

    10 de noviembre de 2015 a las 4:07

avatar de usuario
Antón

Este es un tema sorprendentemente complejo en Python.

Respuesta práctica

Los arreglos están representados por clases. list (ver referencia y no los mezcles con generadores).

Vea ejemplos de uso:

# empty array
arr = [] 

# init with values (can contain mixed types)
arr = [1, "eels"]

# get item by index (can be negative to access end of array)
arr = [1, 2, 3, 4, 5, 6]
arr[0]  # 1
arr[-1] # 6

# get length
length = len(arr)

# supports append and insert
arr.append(8)
arr.insert(6, 7)

Respuesta teórica

Debajo del capó de Python list es un contenedor para una matriz real que contiene referencias a elementos. Además, la matriz subyacente se crea con algo de espacio adicional.

Las consecuencias de esto son:

  • el acceso aleatorio es realmente barato (arr[6653] es lo mismo para arr[0])
  • append la operación es ‘gratis’ mientras que algo de espacio adicional
  • insert la operacion es cara

Mira esto Impresionante tabla de complejidad de operaciones..

Además, vea esta imagen, donde he tratado de mostrar las diferencias más importantes entre la matriz, la matriz de referencias y la lista vinculada:
arreglos, arreglos por todas partes

  • Solo para agregar, hay una forma realmente genial de cortar matrices en python: para [1, 2, 3, 4, 5, 6, 7, 8, 9][1:-2] el resultado será [2, 3, 4, 5, 6, 7]

    – Antón

    16 de marzo de 2016 a las 17:19

  • Veo algunos votos negativos para esta publicación de vez en cuando. Sería genial si alguien pudiera publicar una palabra de por qué. Gracias.

    – Antón

    31 de octubre de 2016 a las 12:29

  • Eres un verdadero MVP. Necesita conocer el diseño real elegido de ‘lista’ para tomar decisiones de programación razonables. Básicamente es como un ‘vector’ en C++. ¡Gracias!

    – Necro

    6 de noviembre de 2017 a las 0:15

  • ¡Esta es una respuesta realmente larga con una gran explicación!

    – Ahmed

    3 de agosto de 2019 a las 2:18

  • ¿Puedo agregar la notación práctica para la comparación, por ejemplo: a == b[:2] devuelve True si los 2 primeros elementos de b es igual a los valores de la matriz a

    –Bruno L.

    17 de mayo de 2020 a las 10:53

avatar de usuario
lennart regebro

En realidad, no declaras cosas, pero así es como creas una matriz en Python:

from array import array
intarray = array('i')

Para obtener más información, consulte el módulo de matriz: http://docs.python.org/library/array.html

Ahora es posible que no desee una matriz, sino una lista, pero otros ya lo han respondido. 🙂

  • Esto es un poco divertido, pero no es realmente una buena respuesta para una pregunta etiquetada como “principiante”. Solo para que quede claro: en Python, generalmente usa un tipo de datos llamado list. Python tiene un tipo de datos de propósito especial llamado array que es más como una matriz C y se usa poco.

    – steveha

    4 de octubre de 2009 a las 2:48

  • No, pero todos los demás ya usaron una lista. Pensé que sería una buena respuesta señalar que también hay matrices.

    – Lennart Regebro

    4 de octubre de 2009 a las 7:38

  • accesorios súper locos para esta respuesta. He estado programando en Python durante años y solo recientemente me di cuenta de que había un objeto de matriz de Python real que es diferente de los objetos de lista. Si bien la estructura de datos es muy similar, las matrices limitan el tipo de objetos que puede contener la matriz. Gran respuesta @LennartRegebro!

    – Josh Brown

    4 de julio de 2015 a las 10:38

  • Esta debería ser la respuesta correcta List y Arrays son dos cosas diferentes @LennartRegebro gracias

    – Mina Gabriel

    28 de octubre de 2016 a las 10:48

  • Hay una razón específica por la que es posible que desee utilizar matrices en lugar de listas. Específicamente, si tiene una matriz llamada myarray llena de números, puede realizar operaciones matemáticas contra ella, y esas operaciones se aplican a todos los elementos dentro de ella. Entonces, si ejecutas myarray/3, cada número dentro se divide por 3. Si intentas hacer lo mismo con una lista, obtendrás un error. Por lo tanto, las matrices son más eficientes para grandes conjuntos de datos de números.

    – Mateo

    14 de julio de 2019 a las 2:30

Creo que (quisiste decir) quieres una lista con las primeras 30 celdas ya llenas. Asi que

   f = []

   for i in range(30):
       f.append(0)

Un ejemplo de dónde se podría usar esto es en la secuencia de Fibonacci. Ver problema 2 en Proyecto Euler

avatar de usuario
credocanadiense

Así es como:

my_array = [1, 'rebecca', 'allard', 15]

  • Dado que esta no es una matriz de python sino una lista de python, ¿no sería menos confuso llamarlo “my_list”?

    – Mattis Asp

    31 de octubre de 2017 a las 15:23

  • Eso crea una lista, no una matriz. Son diferentes y tienen diferentes propiedades en python. Específicamente, puede realizar operaciones numéricas contra una matriz, pero no contra una lista.

    – Mateo

    14 de julio de 2019 a las 2:32

  • Esta afirmación no responde a la pregunta publicada.

    –Rick Henderson

    22 de diciembre de 2021 a las 16:28

avatar de usuario
Gabriel Cohen

Para los cálculos, utilice entumecido arreglos como este:

import numpy as np

a = np.ones((3,2))        # a 2D array with 3 rows, 2 columns, filled with ones
b = np.array([1,2,3])     # a 1D array initialised using a list [1,2,3]
c = np.linspace(2,3,100)  # an array with 100 points beteen (and including) 2 and 3

print(a*1.5)  # all elements of a times 1.5
print(a.T+b)  # b added to the transpose of a

estas matrices numpy se pueden guardar y cargar desde el disco (incluso comprimidas) y los cálculos complejos con grandes cantidades de elementos son rápidos como C.

Muy utilizado en entornos científicos. Ver aquí para más.

  • Dado que esta no es una matriz de python sino una lista de python, ¿no sería menos confuso llamarlo “my_list”?

    – Mattis Asp

    31 de octubre de 2017 a las 15:23

  • Eso crea una lista, no una matriz. Son diferentes y tienen diferentes propiedades en python. Específicamente, puede realizar operaciones numéricas contra una matriz, pero no contra una lista.

    – Mateo

    14 de julio de 2019 a las 2:32

  • Esta afirmación no responde a la pregunta publicada.

    –Rick Henderson

    22 de diciembre de 2021 a las 16:28

avatar de usuario
sabino

El comentario de JohnMachin debería ser la respuesta real. ¡Todas las otras respuestas son solo soluciones en mi opinión! Asi que:

array=[0]*element_count

  • aceptar. excepto tener cuidado de llamar incluso a la variable “matriz”, o conseguir la ira purista. a esto también agregaría que de manera similar puede crear “matrices multidimensionales”: x=[[0] * 10] * 10

    – Peter S. Magnusson

    30 de mayo de 2020 a las 2:29


  • Sí, esto sigue siendo una lista. Use la función type() para determinar por sí mismo.

    –Rick Henderson

    22 de diciembre de 2021 a las 16:31

¿Ha sido útil esta solución?