Python - Problemas para generar matriz identidad NXN python 3.4.0

   
Vista:
Imágen de perfil de Wilder Camilo Castro

Problemas para generar matriz identidad NXN python 3.4.0

Publicado por Wilder Camilo Castro (6 intervenciones) el 29/02/2016 01:25:06
Buenas noche:
Necesito crear un programa donde se le solicite al usuario lngresar la dimension de la matriz N y luego genere la matriz identidad NxN
1
2
3
4
si N=3, el programa debe mostrar como resultado:
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
si N=2 el programa debe mostrar como resultado:
[[1, 0,], [0, 1]]

hasta ahora no llevo mucho

1
2
3
4
5
6
7
8
9
10
11
#Generar una matriz identidad
 
n = int(input('Introduce un entero positivo: '))
 
M = []
for i in range(n):
    M.append( [0] *n )
    print (M)
 
M [0] [0] = 1
print (M)

ayuda por favor
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jorge De Los Santos

Problemas para generar matriz identidad NXN python 3.4.0

Publicado por Jorge De Los Santos (54 intervenciones) el 29/02/2016 03:45:24
Hola Wilder...

La forma más básica en que puedes hacerlo es más o menos lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
n = int(input('Introduce un entero positivo: '))
 
M = [] # Matriz
for i in range(n):
	fila = []
	for j in range(n):
		val = 1 if i==j else 0
		fila.append(val)
	M.append(fila)
 
print M


Básicamente rellenas la matriz elemento a elemento, luego, del álgebra matricial sabrás que en la matriz identidad los "unos" se ubican en la diagonal principal misma cuyos índices de fila y columna son exactamente los mismos, de ahí que se haga la validación de que si los índices fila-columna son iguales.


Ahora, si gustas puedes ir un poco más allá y utilizar "listas por comprensión" combinada con una función, algo más o menos como sigue:

1
2
3
4
5
6
def identidad(n):
	MI = [[1 if j == i else 0 for j in range(n)] for i in range(n)]
	return MI
 
n = int(input('Introduce un entero positivo: '))
print identidad(n)


Lo cual reduce bastante el código, pero aplicas conceptos un poquito más elaborados, que a lo mejor pueden resultar complejos al principio, pero una vez le agarras el hilo todo va mejor.


Finalmente, todo lo anterior también lo puedes reducir aún más utilizando funciones lambda:

1
2
3
n = int(input('Introduce un entero positivo: '))
identidad = lambda n: [[1 if j == i else 0 for j in range(n)] for i in range(n)]
print identidad(n)



Espero te sea útil.



Saludos.

Jorge De Los Santos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar