Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Está en la página 1/ 11
Introduccion a las matrices en Python
La matrices no son una estructura propia de Python. Simplemente, una matriz es una
lista de listas que nosotros interpretamos desde el punto de vista matematico. Es decir,
laestructuram = [[1,2],[3,4]] nosotros la interpretamos como la matriz 2x2 cuya
primera fila es (1,2) y cuya segunda fila es (3,4), pero esto no deja de ser una
interpretacion.
In [1]: m= [{1,2],(3,4]]
m
Out{1}: (£1, 2], [3, 41]
Para representar una matriz, debemos crear una funci6n especifica.
In [2]: def dibujaMatriz(M):
for i in range(ten(M)):
print ‘[',
for j in range(ten(M[i])):
print '{:>3s}'. format (str(M[4][J])),
print ‘]'
dibujatatriz(m)
[ 1 2]
[ 3 4]
In [3]: n = [[1,10,100], [20,2,200], [300,30,3]]
dibujamatriz(n)
1 10 100 ]
2 200 ]
[
[ 2
[ 300 30 3]
Para representar una matriz, a veces es interesante pasarlo a una cadena de caracteresIn [4]: def matriz2str(matriz) :
cadena = ''
for i in range(Len(matriz)):
cadena += '['
for j in range(ten(matriz{i])):
cadena += '{:>4s}'. format (str(matriz[i][j]))
cadena += ']\n'
return cadena
In [5]: 5 = matriz2str(n)
print s
1 10 100)
20 2 200)
0
[
[
[ 300 30 3]
Podemos crear matrices de diversas maneras
In [6]: def creaMatriz(n,m):
Esta funcién crea una matriz vacia con n filas y n columnas.
@param n : Ndmero de filas.
Gparam m : Ndmero de columnas
@type n: int
@type m: int
Greturn: devuelve una matriz n por m
@rtype: matriz (lista de Listas)
matriz = []
for i in range(n):
a = [0]*m
matriz.append(a)
return matrizIn [7]:
def creaMatrizDato(n,m, dato):
Esta funcién crea una matriz con n filas y n columnas.
Cada celda contiene el valor “dato”
@param n : Ndmero de filas.
@param m : Ndmero de columnas
@param dato: Un valor
Gtype n: entero
@type m: entero
Gtype dato: tipo simple
Greturn: devuelve una matriz n por m
G@rtype: matriz (lista de listas)
matriz = []
for i in range(n):
a = [dato] *m
mat riz.append(a)
return matriz
Cuidado: hay que crear bien las matrices
In [8]:
In [9]:
det badmatrix(n,m) :
a = [0]*m
matriz = [a]*n
return matriz
M = badmatrix(2,2)
print
[f0, 6], [0, 01]
M[O] [0]=1
print
{{1, 0], (1, 91]
Dada una matriz, podemos estudiar si es correctaIn [10]: def matrizCorrecta(M) :
Nos dice si una matriz es correcta.
Gparam M: una matriz
@type M: matriz
@return: True si es correcta, False en caso contrario
filas = len(M)
columnas = len(M[0])
correcto = True
a1
while i < filas and correcto:
correcto = (Len(M[i]) =:
itl
return correcto
columnas)
In [11]: m= [[1,2,3], [2,4]]
matrizCorrecta(M)
Out[11]: False
Puede ser util la utilizacion de funciones auxiliaresIn [12]: def filas(M):
Nos dice el ntmero de filas de una matriz correcta.
Gparam M: una matriz
G@type M: matriz
@return: numero de filas
if matrizCorrecta(M)
return Len(M)
def columnas(M)
Nos dice el numero de columnas de una matriz correcta.
@param M: una matriz
@type M: matriz
Greturn: ntimero de columnas
if matrizCorrecta(M) :
return len(M[0])
def matrizIdentidad(n) :
Crea una matriz identidad de tamad+o n
@param n : numero de filas.
Gtype n : entero -
Greturn: matriz identidad de tamaA+o n
m = creaMatriz(n,n)
for i in range(n):
m(i}[i] = 1
return m
def copy(m):
Realiza una copia independiente de la matriz
result=[]
for f in m:
result.append(f[:])
return result
Recuerda que no se puede leer una matriz directamente del teclado, utilizando
raw_input() . Se puede leer una matriz introduciendo por teclado cada una de sus
entradasIn [13]:
def leelatriz(n,m) :
Esta funcién lee por teclado una matriz con n filas y n columna
@param n ; Numero de filas.
@param m : Nimero de columnas
@type n: entero
@type m: entero
G@return: devuelve una matriz n por m
A = creaMatriz(n,m)
for i in range(n):
for j in range(m):
ALi] [J] = int(raw_input(‘Introduce la componente (%d,%d
ys '%(4,5)))
return A
Puede ser mas comodo, para matrices grandes, si se lee desde un fichero (ejercicio)
In [14]:
def copy(m) :
Crea una copia de la matriz
result=[]
for f in m:
result. append(t[:])
return result
Algunas operaciones matematicas con matrices
In [15]:
def sumaMatriz(A,B) :
_ Suma dos matrices. Las dos matrices deben ser de la misma dimen
siA‘n
@param A: una matriz oxm
@param B: una matriz nxm
Gtype A: Matriz
@type B: Matriz
@return: Matriz suma
if filas(A) == filas(B) and columnas(A)
C = creaMatriz(fitas(A), columnas(A))
for i in range(fitas(A)):
for j in range(columnas(A)) :
Clad] = ACi1(3] + B14]1i1
return C
columnas(B) :In [16]: def multiplicatatriz(A,B) :
Multiplica dos matrices. El numero de columnas de la primera de
be ser igual al nlimero de filas de la segunda.
Gparam A: una matriz nxm
@param B: una matriz mxk
Gtype A: Matriz
Gtype B: Matriz
G@return: Matriz multiplicacion nxk
if columnas(A) == filas(B):
C = creaMatriz(filas(A), columnas(B))
for i in range(filas(C)):
for j in range(columnas(C)):
for k in range(columnas(A)) :
Cfil(j] += Ali}(k] * BLK][j]
return C
In [17]: def traspuesta(M):
Calcula la matriz traspuesta de M
m = len(M) #fitas
n= len(M[0]) # columnas
T = creaMatriz(n,m)
for i in range(n):
for j in range(m):
TEA} (3] = MUIL4
return T
Determinantes
Podemos calcular el determinante de una matriz cuadrada de dos maneras. La primera
es tratar de transformar la matriz en otra en la que solo hay ceros debajo de la diagonal
principal. La matriz transformada tiene el mismo determinante que la matriz original
(salvo tal vez el signo).
Para ejecutar las operaciones basicas, creamos unas funciones auxiliares:
In [18]: def multiplicaFila(m,f,e):
Multiplica la fila f por el valor e
n=len(m)
for c in range(n):
m[t]} [c]=m[f] [c]*e
In [19]: m=[[2,1,3],(4,2,3],2,3,2]]In [20]:
Out [20]:
In [21]:
In [22]:
Out [22]:
In [23]:
In [24]:
Out [24]:
multiplicaFila(m, 1, 3)
m
((2, 1, 3], [12, 6, 9], [2, 3, 2]]
def combinacion(m,i,j,e)
Combina las filas 1 y j, afladiendo a la fila j el producto de l
Tila 1 por un factor e
n=len(m)
for c in range(n):
m(j]f¢e]=m[j]{c]+e*m[i}[c]
combinacion(m, 0, 1, 10)
m
[(2, 1, 3], [32, 16, 39], [2, 3, 2]]
def intercambiaFilas(m,i,j):
m[i],m{j] = m{j],m[i]
intercambiaFilas(m, 0, 1)
m
[(32, 16, 39], [2, 1, 3], [2, 3, 2]]In [25]:
In [26]:
out [26]:
In [27]:
out [27]:
In [28]:
out [28] :
In [29]:
def determinante(matriz) :
Calcula el determinante poniendo ceros debajo
de la diagonal principal
m = copy(matriz)
en(m)
det=1
tor i in range(n):
j=primeroNoNuto(m,i)
if j =n:
return 0
if i!=j:
det=-1*det
intercambiaFilas(m,i,j)
det=det*m[i] [4]
multiplicaFita(m,4,1./m{4]{4])
for k in range(i+l,n):
combinacion(m, i,k, -m[k] [i])
return det
def primeroNoNulo(m, 4):
A partir de la fila i, busca la primera fila j cuya entrada
(i,j) es nula
result=i
while result eso qué es?
In [33]: