Download as pdf or txt
Download as pdf or txt
You are on page 1of 2

Matrius en Python

Una matriu és una generalització a més d'una dimensió (però ens quedarem a dues) del
concepte de vector. Una matriu permet un accés molt ràpid a qualsevol dels elements que conté.
Per fer-ho, usa l'accés indexat, només que ara calen dos índexs. Ambdós índexs han de complir
les condicions habituals:
• Són enters -o expressions enteres-
• Estan en el rang 0..N-1

Si dibuixem una matriu, anomenem fila a tots els elements que estan en la mateixa línia
horitzontal. I columna als que estan en la mateixa línia vertical.
Tenim una matriu de 3 files i 4 columnes:
𝑎𝑏𝑐𝑑
𝑚 = (𝑒 𝑓 𝑔 ℎ )
𝑖 𝑗 𝑘 𝑙

Algebraicament indiquem els elements amb subíndexs: m2,1 és l'element de la fila 2, columna 1
(files i columnes es numeren a partir de zero), que és la j. Com que en programació no es disposa
de subíndexs, els llenguatges han adoptat formes equivalents, sent les més habituals: m[2,1] o
bé m[2][1].

Python disposa de vectors (taules, arrays) de manera nadiua; les anomena llistes. En canvi no
disposa de matrius (cal importar altres mòduls). Tot i això podem simular de manera efectiva les
matrius usant llistes.

En Python aprofitem que els elements que hi ha en una llista poden ser de qualsevol tipus. En
particular, altres llistes:

m=[45,[10,20,30],53]

Amb l'accés indexat de les llistes, tenim que m[0] és 45, m[1] és [10,20,30] i m[2] és 53.

Com que m[1] és una llista, podem accedir-hi de manera indexada: m[1][0] és 10, m[1][1]
és 20 i m[1][2] és 30.

Una altra manera d'explicar-ho és notar que si haguéssim fet b=m[1], com que b és una llista
podríem també escriure b[0] i obtenir el 10. Només es tracta de substituir b pel que realment
és, m[1] i així tornem a tenir m[1][0] per a obtenir el 10.

Aquesta manera d'accedir (m[1][0]) és una de les formes que hem dit anteriorment que s'usen
per indicar una matriu i és com ho farem servir en Python.

Recordem que les llistes ens permeten consultar un valor però també assignar-lo.

La matriu anterior es construiria tota de cop així:

m=[[a,b,c,d], [e,f,g,h], [i,j,k,l]]

Notem que el primer element de la llista m, [a,b,c,d], correspon als elements de la primera
fila de la matriu, i així successivament. Diem doncs que els elements estan guardats per files.
Tot i que podríem construir una matriu de manera progressiva, si és possible se suggereix crear
la matriu amb totes les posicions plenes (encara que siguin 0, cadenes buides o None) i
posteriorment assignar amb accés indexat els valors definitius en cada posició.

Per exemple, creem inicialment una matriu de 3 files i 4 columnes plena de zeros:

m=[]
for f in range(0,3):
fila=[0]*4 # equival a [0,0,0,0]; hi ha més maneres de fer-ho
m.append(fila)
print(m) # mostra [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

A partir d'aquí podem posar-hi els valors en l'odre que desitgem:

m[0][0]=a
m[0][1]=b
...

tot i que normalment això ho farem amb bucles. Per exemple, el següent codi inicialitza la matriu
amb els valors 1, 2... 12 guardats per files:

i=1
for f in range(0,3):
for c in range(0,4):
m[f][c]=i
i+=1
print(m)

Una advertència: si creeu la matriu de la següent manera:

m=[]
fila=[0]*4
for f in range(0,3):
m.append(fila)

Veureu que no funciona: si assigneu un valor a, per exemple m[2][1], aquest valor es replica a
m[0][1] i a m[1][1]. Això és degut que només creem una sola fila, referenciada per la variable
fila, i que a la llista m s'afegeix tres vegades la mateixa variable referència.

You might also like