¿Cómo ingresar matriz (lista 2D) en Python 3.4?

Soy nuevo en Python 3.4 y suelo usar MATLAB / GNU Octave para el cálculo de matrices. Sé que podemos realizar el cálculo matricial utilizando numpy en Python 2.x, pero numpy no funciona para Python 3.4.

Intenté crear este código para ingresar una matriz m por n. Tenía la intención de ingresar [[1,2,3],[4,5,6]] pero el código arroja [[4,5,6],[4,5,6] . Lo mismo sucede cuando ingreso otra matriz m por n, el código produce una matriz m por n cuyas filas son idénticas.

Quizás puedas ayudarme a encontrar el problema con mi código.

 m = int(input('number of rows, m = ')) n = int(input('number of columns, n = ')) matrix = []; columns = [] # initialize the number of rows for i in range(0,m): matrix += [0] # initialize the number of columns for j in range (0,n): columns += [0] # initialize the matrix for i in range (0,m): matrix[i] = columns for i in range (0,m): for j in range (0,n): print ('entry in row: ',i+1,' column: ',j+1) matrix[i][j] = int(input()) print (matrix) 

El problema está en el paso de inicialización.

 for i in range (0,m): matrix[i] = columns 

Este código hace que cada fila de su matrix refiera al mismo objeto de columns . Si algún elemento en alguna columna cambia, todas las demás columnas cambiarán:

 >>> for i in range (0,m): ... matrix[i] = columns ... >>> matrix [[0, 0, 0], [0, 0, 0]] >>> matrix[1][1] = 2 >>> matrix [[0, 2, 0], [0, 2, 0]] 

Puedes inicializar tu matriz en un bucle nested, como este:

 matrix = [] for i in range(0,m): matrix.append([]) for j in range(0,n): matrix[i].append(0) 

o, en una sola línea usando la comprensión de lista:

 matrix = [[0 for j in range(n)] for i in range(m)] 

o:

 matrix = [x[:] for x in [[0]*n]*m] 

Ver también:

  • ¿Cómo inicializar una matriz bidimensional en Python?

Espero que ayude.

Puedes aceptar una lista 2D en python de esta manera …

simplemente

 arr2d = [[j for j in input().strip()] for i in range(n)] # n is no of rows 

para personajes

 n = int(input().strip()) m = int(input().strip()) a = [[0]*n for _ in range(m)] for i in range(n): a[i] = list(input().strip()) print(a) 

o

 n = int(input().strip()) n = int(input().strip()) a = [] for i in range(n): a[i].append(list(input().strip())) print(a) 

para numeros

 n = int(input().strip()) m = int(input().strip()) a = [[0]*n for _ in range(m)] for i in range(n): a[i] = [int(j) for j in input().strip().split(" ")] print(a) 

donde n es no de elementos en columnas mientras que m es no de elementos en una fila.

De forma pirónica, esto creará una lista de listas.

Aparte de la respuesta aceptada, también puede inicializar sus filas de la siguiente manera: matrix[i] = [0]*n

Por lo tanto, la siguiente pieza de código funcionará –

 m = int(input('number of rows, m = ')) n = int(input('number of columns, n = ')) matrix = [] # initialize the number of rows for i in range(0,m): matrix += [0] # initialize the matrix for i in range (0,m): matrix[i] = [0]*n for i in range (0,m): for j in range (0,n): print ('entry in row: ',i+1,' column: ',j+1) matrix[i][j] = int(input()) print (matrix) 

Este código toma el número de filas y columnas del usuario, luego toma elementos y muestra como una matriz.

 m = int(input('number of rows, m : ')) n = int(input('number of columns, n : ')) a=[] for i in range(1,m+1): b = [] print("{0} Row".format(i)) for j in range(1,n+1): b.append(int(input("{0} Column: " .format(j)))) a.append(b) print(a) 

Si su matriz se da de manera similar a una fila, donde el tamaño es s * s aquí s = 5 5 31 100 65 12 18 10 13 47 157 6 100 113 174 11 33 88 124 41 20 140 99 32 111 41 20

entonces puedes usar esto

 s=int(input()) b=list(map(int,input().split())) arr=[[b[j+s*i] for j in range(s)]for i in range(s)] 

tu matriz será ‘arr’

La creación de matrices con números prepopulados se puede hacer con la comprensión de la lista. Puede ser difícil de leer pero hace el trabajo:

 rows = int(input('Number of rows: ')) cols = int(input('Number of columns: ')) matrix = [[i + cols * j for i in range(1, cols + 1)] for j in range(rows)] 

con 2 filas y 3 columnas la matriz será [[1, 2, 3], [4, 5, 6]], con 3 filas y 2 columnas la matriz será [[1, 2], [3, 4], [ 5, 6]] etc.

 a = [] b = [] m=input("enter no of rows: ") n=input("enter no of coloumns: ") for i in range(n): a = [] for j in range(m): a.append(input()) b.append(a) 

Entrada: 1 2 3 4 5 6 7 8 9

Salida: [[” 1 ‘,’ 2 ‘,’ 3 ‘], [‘ 4 ‘,’ 5 ‘,’ 6 ‘], [‘ 7 ‘,’ 8 ‘,’ 9 ‘]]

 row=list(map(int,input().split())) #input no. of row and column b=[] for i in range(0,row[0]): print('value of i: ',i) a=list(map(int,input().split())) print(a) b.append(a) print(b) print(row) 

Salida:

 2 3 value of i:0 1 2 4 5 [1, 2, 4, 5] value of i: 1 2 4 5 6 [2, 4, 5, 6] [[1, 2, 4, 5], [2, 4, 5, 6]] [2, 3] 

Nota: este código en caso de control.it solo control no. De filas, pero podemos ingresar cualquier número de columna que queramos, es decir, row[0]=2 así que tenga cuidado. Este no es el código donde no puedes controlar ninguna de las columnas.

m, n = mapa (int, input (). split ()) # m – número de filas; n – número de columnas;

matriz = [[int (j) para j en la entrada (). split () [: n]] para i en el rango (m)]

para i en la matriz: imprimir (i)

 a,b=[],[] n=int(input("Provide me size of squre matrix row==column : ")) for i in range(n): for j in range(n): b.append(int(input())) a.append(b) print("Here your {} column {}".format(i+1,a)) b=[] for m in range(n): print(a[m]) 

funciona perfectamente

 rows, columns = list(map(int,input().split())) #input no. of row and column b=[] for i in range(rows): a=list(map(int,input().split())) b.append(a) print(b) 

entrada

 2 3 1 2 3 4 5 6 

salida [[1, 2, 3], [4, 5, 6]]