Arreglos 2D en Python

¿Cuál es la mejor manera de crear matrices 2D en Python?

Lo que quiero es querer es almacenar valores como este:

X , Y , Z 

de modo que accedo a datos como X[2],Y[2],Z[2] o X[n],Y[n],Z[n] donde n es variable. No sé al principio qué tan grande sería n , por lo que me gustaría agregar valores al final.

 >>> a = [] >>> for i in xrange(3): ... a.append([]) ... for j in xrange(3): ... a[i].append(i+j) ... >>> a [[0, 1, 2], [1, 2, 3], [2, 3, 4]] >>> 

Dependiendo de lo que estés haciendo, es posible que realmente no tengas una matriz 2D.

El 80% de las veces tiene una lista simple de “objetos similares a filas”, que podrían ser secuencias adecuadas.

 myArray = [ ('pi',3.14159,'r',2), ('e',2.71828,'theta',.5) ] myArray[0][1] == 3.14159 myArray[1][1] == 2.71828 

Más a menudo, son instancias de una clase o un diccionario o un conjunto o algo más interesante que no tenías en tus idiomas anteriores.

 myArray = [ {'pi':3.1415925,'r':2}, {'e':2.71828,'theta':.5} ] 

20% de las veces que tiene un diccionario, tecleado por un par

 myArray = { (2009,'aug'):(some,tuple,of,values), (2009,'sep'):(some,other,tuple) } 

En raras ocasiones, ¿realmente necesitarás una matriz?

Tienes una gran cantidad de clases de colección en Python. Las probabilidades de que tengas algo más interesante que una matriz son buenas.

En Python uno usualmente usaría listas para este propósito. Las listas se pueden anidar arbitrariamente, lo que permite la creación de una matriz 2D. No todas las listas secundarias tienen que ser del mismo tamaño, de modo que resuelva tu otro problema. Echa un vistazo a los ejemplos a los que he vinculado.

Si desea realizar un trabajo serio con las matrices, debe utilizar la biblioteca numpy . Esto le permitirá, por ejemplo, realizar la sum de vectores y la multiplicación de matrices, y para matrices grandes es mucho más rápido que las listas de Python.

Sin embargo, numpy requiere que el tamaño esté predefinido. Por supuesto, también puede almacenar matrices numpy en una lista, como:

 import numpy as np vec_list = [np.zeros((3,)) for _ in range(10)] vec_list.append(np.array([1,2,3])) vec_sum = vec_list[0] + vec_list[1] # possible because we use numpy print vec_list[10][2] # prints 3 

Pero como las matrices numpy son bastante pequeñas, creo que hay una sobrecarga en comparación con el uso de una tupla. Todo depende de tus prioridades.

Vea también esta otra pregunta , que es bastante similar (aparte del tamaño variable).

Te sugiero que uses un diccionario como este:

 arr = {} arr[1] = (1, 2, 4) arr[18] = (3, 4, 5) print(arr[1]) >>> (1, 2, 4) 

Si no está seguro de que haya una entrada definida en el diccionario, necesitará un mecanismo de validación al llamar “arr [x]”, por ejemplo, try-except.

Si le preocupa la huella de memoria, la biblioteca estándar de Python contiene el módulo de matriz ; Estas matrices contienen elementos del mismo tipo.

Por favor considere los siguientes códigos:

 from numpy import zeros scores = zeros((len(chain1),len(chain2)), float) 
 x=list() def enter(n): y=list() for i in range(0,n): y.append(int(input("Enter "))) return y for i in range(0,2): x.insert(i,enter(2)) print (x) 

Aquí hice una función para crear una matriz 1-D y la inserté en otra matriz como miembro de la matriz. múltiples matrices 1-d dentro de una matriz, ya que el valor de n e i cambia u crea matrices multidimensionales