Matrixrekening: Matrices in Python
Selectie van componenten en toewijzing van waarden
Selectie van componenten en deelmatrices Je kunt op verschillende manieren componenten van matrices selecteren. We geven een paar voorbeelden, waaruit blijkt dat indexering begint bij (0, 0) en er slimme manieren zijn om deelmatrices te creëren.
>>> import numpy as np
>>> M = np.array([range(2,6), range(6, 10), range(10, 14)]); print(M)
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
>>> M[1,2] # een enkel matrixelement, in 2-de rij en 3-de kolom
8
>>> M[:, 3] # derde kolom
array([ 4, 8, 12])
>> M[0] # eerste rij
array([2, 3, 4, 5])
>> M[0, 1:] # eerste rij, alles behalve eerste kolom
array([3, 4, 5])
>> M[0:2, 0:2] # deelmatrix
array([[2, 3],
[6, 7]])
Selectie via logische expressies Je kunt ook logische indexering (met nullen en enen) gebruiken om componenenten van vectoren te selecteren. Hiervoor heb je relationele operatoren nodig, zoals uit onderstaande tabel. Behalve logische indexering kan je ook de where
instructie gebruiken om geschikte indices bij een logische uitdrukking op te sporen
== | gelijk aan | ~= | niet gelijk aan |
< | kleiner dan | > | groter dan |
<= | kleiner dan of gelijk aan | >= | groter dan of gelijk aan |
>>> M = np.array([range(2,6), range(6, 10), range(10, 14)]); print(M)
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]] >>> #waarden true/false als aan de voorwaarde wel/niet voldaan is:
>>> lM = M>7; print(lM)
[[False False False False]
[False False True True]
[ True True True True]]
>>> M(lM) # rijgewijze selectie van componenten
array([ 8, 9, 10, 11, 12, 13])
>>> ij = np.where(M<9); print(ij) % selectie van indices
(array([0, 0, 0, 0, 1, 1], dtype=int64), array([0, 1, 2, 3, 0, 1], dtype=int64))
>>> M[ij] # rijgewijze selectie van componenten
array([2, 3, 4, 5, 6, 7])
Toewijzing Componenten waar je naar refereert kun je ook een waarde toewijzen
>>> import numpy as np
>>> M = np.array([range(2,6), range(6, 10), range(10, 14)]); print(M) [[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
>> M[2,3] = 17; print(M) # enkel matrixelement gewijzigd
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 17]]
>>> M[:,3] = 1; print(M) # alle elementen in de vierde kolom gelijk aan 1 gesteld [[ 2 3 4 1]
[ 6 7 8 1]
[10 11 12 1]] >>> M = np.delete(M, 0, 0); print(M) # eerste rij verwijderd [[ 6, 7, 8, 1]
[10, 11, 12, 1]] >>> M[:] = 0; print(M) # alle elementen gelijk aan 0 gesteld[[0 0 0 0]
[0 0 0 0]]
Door toewijzing kan je dus ook de structuur wijzigen op voorwaarde dat je wel een matrix overhoudt. In onderstaand voorbeeld geven we een matrix extra componenten door toewijzing. Dit is overigens niet een aanbevolen manier om te werken. Het vooraf reserveren van voldoende ruimte voor componenten in een matrix via de zeros constructie en dan pas de data matrix vullen met waarden door toewijzing is een betere manier om gegevens te verzamelen in Python experimenten.
>>> M = np.array([[2,4], [3,5]]); print(M)
[[2 4]
[3 5]]
>>> v = np.array([[6],[7]]); print(v)
[[6]
[7]]
>>> M = np.append(M, v, axis=1); print(M)
[[2 4 6]
[3 5 7]]
Vormverandering Je kunt uitgaande van een vector of matrix ook de vorm veranderen. Onderstaande twee voorbeelden illustreren dit.
>>> v = np.array(range(1,7)); print(v)
#
vector van lengte 6
[1 2 3 4 5 6]
>>> A = np.reshape(v, (3, 2)); print(A) # 3x2 matrix
[[1 2]
[3 4]
[5 6]]
>>> B = np.reshape(A, (2, 3)); print(B) # 2x3 matrix
[[1 2 3]
[4 5 6]]