Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Out[1]:
Las matrices son arreglos de elementos en dos dimensiones. Se representan como elementos en un
arreglo rectangular, el cual puede tener m filas y n columnas.
M 1,1
M 2,1
M =
M 1,1
M 1,2
M 2,2
M 1,2
M 1,n
M 2,n
,
M m,n
M n,m
Matrices en numpy
En numpy las matrices son un caso especial de los arreglos multidimensionales ndarray: las matrices
son arreglos de dos dimensiones, uno para las filas y otro para las columnas. Se necesitan dos ndices
para identificar un elemento de la matriz.
Esta funcin acepta un argumento que indica la forma que tendr el nuevo array, es decir, cuantas filas
y cuantas columnas tendr. El resultado que devuelve la funcin es una matriz de unos.
In [4]: forma1 = (10, 5)
# Diez filas por cinco columnas
matriz1 = ones(forma1)
# Se crea la matriz, y se guarda en una variabl
matriz1
# Muestra la matriz
Out[4]:
array([[
[
[
[
[
[
[
[
[
[
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.,
1.],
1.],
1.],
1.],
1.],
1.],
1.],
1.],
1.],
1.]])
Funcin zeros
Anloga a ones, pero el resultado es un arreglo de ceros.
In [5]: forma2 = (7, 8)
# Siete filas por ocho columnas
matriz2 = zeros(forma2)
matriz2
Out[5]:
array([[
[
[
[
[
[
[
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.,
0.],
0.],
0.],
0.],
0.],
0.],
0.]])
Funcin identity
Crea una matriz identidad, es decir, con unos en la diagonal principal y ceros en el resto de los
elementos. Acepta un argumento: el nmero de filas y de columnas de la matriz. La matriz identidad es
cuadrada, de n filas por n columnas.
In [7]: filas = 6
matriz_identidad = identity(filas)
matriz_identidad
Out[7]:
array([[
[
[
[
1.,
0.,
0.,
0.,
0.,
1.,
0.,
0.,
0.,
0.,
1.,
0.,
0.,
0.,
0.,
1.,
0.,
0.,
0.,
0.,
0.],
0.],
0.],
0.],
[ 0.,
[ 0.,
0.,
0.,
0.,
0.,
0.,
0.,
1.,
0.,
0.],
1.]])
Funcin diag
Crea una matriz cuadrada diagonal, es decir. Se le pasa un argmento, una lista que consiste de los
elementos de tendr la diagonal principal.
In [9]: elems_diagonal = [5, 8, -4, -16, 666, 56, 12, 99, -152, -11]
matriz_diagonal = diag(elems_diagonal)
matriz_diagonal
Out[9]:
array([[
[
[
[
[
[
[
[
[
[
5,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
-4,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
-16,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
666,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
56,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
12,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
99,
0,
0, -152,
0,
0,
0],
0],
0],
0],
0],
0],
0],
0],
0],
-11]])
Funcin rand
Crea una matriz de nmeros aleatorios en el intervalo
el nmero de filas y el nmero de columnas.
array([[
[
[
[
[
[
[
[
[
[
0.2002865 ,
0.77917584,
0.42901124,
0.68782721,
0.21001791,
0.13006853,
0.90199068,
0.05229118,
0.14453956,
0.75620908,
0.26887779,
0.43541702,
0.25557539,
0.94884664,
0.87353201,
0.76185967,
0.93931391,
0.82251621,
0.53457481,
0.00618516,
0.94346341],
0.64573693],
0.78001591],
0.86512828],
0.43399087],
0.37473635],
0.33328925],
0.77996395],
0.70662357],
0.39075013]])
Funcin randint
Devuelve un nmero aleatorios enteros. Esta funcin requiere de mnimo un argumento
entero, tal que el resultado es un entero en el intervalo [0, base).
In [22]: base = 155
base, de tipo
Out[22]:
111
Para crear una matriz hay que especificar, adems del primer argumento, el argumento nombrado size.
Este argumento es una tupla de nmeros enteros que define la forma del resultado, es decir, cuantas
filas y columnas tendr la matriz.
In [21]: base = 155
# Lmite superior de los enteros aleatorios
forma = (10, 5)
# Diez filas por 5 columnas
matriz_aleatoria_entera = randint(base, size=forma)
matriz_aleatoria_entera
Out[21]:
Se puede especificar otro argumento nombrado, high, que debe ser un entero sup , y cuando se
especifica el resultado estar contenido en el intervalo [base, sup).
In [23]: base = 155
sup = 160
forma = (10, 5)
# Diez filas por 5 columnas
matriz_aleatoria_entera = randint(base, high=sup, size=forma)
matriz_aleatoria_entera
Out[23]:
array([[157,
[159,
[156,
[159,
[156,
[156,
[157,
[156,
[156,
[159,
159,
158,
157,
158,
157,
158,
158,
159,
157,
156,
159,
159,
157,
156,
155,
157,
159,
159,
157,
156,
159,
159,
157,
156,
155,
159,
159,
155,
157,
155,
156],
158],
155],
159],
157],
157],
157],
159],
159],
155]])
Manipular matrices
Las matrices son arreglos de dos dimensiones, por lo tanto necesitamos especificar dos ndices para
identificar cada uno de sus elementos. La manera de hacerlo es igual a como se hace con arreglos de
una dimensin, con el operador de particin, los famosos corchetes []. La diferencia es que ahora
tendremos que especificar los dos ndices de un elemento en partcular, separandolos con comas.
Tomemos una matriz de nmeros aleatorios como base:
In [46]: filas, columnas = 11, 4
mat = rand(filas, columnas)
mat
Out[46]:
array([[
[
[
[
[
[
[
[
[
[
[
0.65453916,
0.51253953,
0.52326934,
0.50317073,
0.45898043,
0.26825337,
0.02640278,
0.68947099,
0.97442309,
0.16844096,
0.86604763,
0.01876896,
0.02039413,
0.30986745,
0.71370661,
0.67088425,
0.09546809,
0.40232014,
0.23741278,
0.95293486,
0.21269583,
0.38092307,
0.78148544,
0.06076788,
0.73484467,
0.47703042,
0.28352537,
0.86720485,
0.25040253,
0.91493267,
0.72084605,
0.23054219,
0.42106628,
0.84828785],
0.51177813],
0.44205504],
0.7454803 ],
0.15026625],
0.26511276],
0.07531441],
0.43774978],
0.3211908 ],
0.14232995],
0.06122231]])
array([ 0.65453916,
0.01876896,
0.78148544,
0.84828785])
Efectivamente esto extrajo la primera fila. Si se cambia el valor de la variable fila_indice se pueden
extraer otras filas.
In [48]: fila_indice = 10
fila = mat[fila_indice]
fila
Out[48]:
array([ 0.86604763,
0.38092307,
0.42106628,
0.06122231])
Conclusin: para acceder a las filas especificamos un slo ndice dentro de los corchetes; el ndice
especifica la fila.
Out[50]:
0.73484467,
0.91493267,
0.47703042,
0.72084605,
0.28352537,
0.23054219,
array([[
[
[
[
[
[
[
[
[
[
[
0.65453916,
0.51253953,
0.52326934,
0.50317073,
0.45898043,
0.26825337,
0.02640278,
0.68947099,
0.97442309,
0.16844096,
0.86604763,
0.01876896,
0.02039413,
0.30986745,
0.71370661,
0.67088425,
0.09546809,
0.40232014,
0.23741278,
0.95293486,
0.21269583,
0.38092307,
0.78148544,
0.06076788,
0.73484467,
0.47703042,
0.28352537,
0.86720485,
0.25040253,
0.91493267,
0.72084605,
0.23054219,
0.42106628,
0.84828785],
0.51177813],
0.44205504],
0.7454803 ],
0.15026625],
0.26511276],
0.07531441],
0.43774978],
0.3211908 ],
0.14232995],
0.06122231]])
Out[52]:
0.65453916449880156
elem
Out[53]:
0.061222309331296354
Se pueden especificar otros valores para las variables m y n y todo funciona de manera similar:
In [54]: m, n = 2, 3
# La fila es m = 2, la columna es n = 3
elem = mat[m, n]
# El elemento en la fila m y columna n de mat es
elem
Out[54]:
0.44205504398869055
Out[55]:
array([[
[
[
[
[
[
[
[
[
[
[
6.66666666,
0.51253953,
0.52326934,
0.50317073,
0.45898043,
0.26825337,
0.02640278,
0.68947099,
0.97442309,
0.16844096,
0.86604763,
0.01876896,
0.02039413,
0.30986745,
0.71370661,
0.67088425,
0.09546809,
0.40232014,
0.23741278,
0.95293486,
0.21269583,
0.38092307,
0.78148544,
0.06076788,
0.73484467,
0.47703042,
0.28352537,
0.86720485,
0.25040253,
0.91493267,
0.72084605,
0.23054219,
0.42106628,
0.84828785],
0.51177813],
0.44205504],
0.7454803 ],
0.15026625],
0.26511276],
0.07531441],
0.43774978],
0.3211908 ],
0.14232995],
0.06122231]])
El elemento efectivamente ha sido reemplazado. Como hemos visto la asignacin se hace sobre la
variable mat especificando en los corchetes el ndice y la columna.
array([[
[
[
[
[
[
[
[
[
[
[
0.50209017,
0.94639172,
0.11321902,
0.14063406,
0.46996784,
0.64436161,
0.27997485,
0.97550061,
0.61081667,
0.8338188 ,
0.38523306,
0.93851252,
0.04594547,
0.60394931,
0.04681606,
0.80000167,
0.16414114,
0.61570686,
0.26363993,
0.22472446,
0.83422881,
0.15486907,
0.50351267,
0.97264301,
0.59491067,
0.79565573,
0.4721156 ,
0.44007561,
0.9446398 ,
0.9173331 ,
0.06097698,
0.36783317,
0.87512199,
0.81221498],
0.3890924 ],
0.27669201],
0.82699289],
0.26473768],
0.11066562],
0.9460158 ],
0.5468556 ],
0.88778227],
0.62228038],
0.43464254]])
->
->
->
->
->
->
->
->
->
->
->
[
[
[
[
[
[
[
[
[
[
[
0.50209017
0.94639172
0.11321902
0.14063406
0.46996784
0.64436161
0.27997485
0.97550061
0.61081667
0.8338188
0.38523306
0.93851252
0.04594547
0.60394931
0.04681606
0.80000167
0.16414114
0.61570686
0.26363993
0.22472446
0.83422881
0.15486907
0.50351267
0.97264301
0.59491067
0.79565573
0.4721156
0.44007561
0.9446398
0.9173331
0.06097698
0.36783317
0.87512199
0.81221498]
0.3890924 ]
0.27669201]
0.82699289]
0.26473768]
0.11066562]
0.9460158 ]
0.5468556 ]
0.88778227]
0.62228038]
0.43464254]
Esto es as porque for .. in .. extrae los elementos identificados por el primer ndice de una matriz,
y el primer ndice especifica la fila.
El atributo shape de una matriz nos dice el nmero de filas y columas que tiene, es decir, la forma de la
matriz:
In [61]: forma = matriz.shape
forma
Out[61]:
(11L, 4L)
filas_indices
Out[67]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Entonces ahora iteramos no sobre la matriz, sino sobre la lista de ndices. Luego usamos los ndices
para obtener la fila con dicho ndice:
In [68]: # Iteramos sobre los indices
for fila_indice in filas_indices:
fila = matriz[fila_indice]
print 'Fila ->', fila
Fila
Fila
Fila
Fila
Fila
Fila
Fila
Fila
Fila
Fila
Fila
->
->
->
->
->
->
->
->
->
->
->
[
[
[
[
[
[
[
[
[
[
[
0.50209017
0.94639172
0.11321902
0.14063406
0.46996784
0.64436161
0.27997485
0.97550061
0.61081667
0.8338188
0.38523306
0.93851252
0.04594547
0.60394931
0.04681606
0.80000167
0.16414114
0.61570686
0.26363993
0.22472446
0.83422881
0.15486907
0.50351267
0.97264301
0.59491067
0.79565573
0.4721156
0.44007561
0.9446398
0.9173331
0.06097698
0.36783317
0.87512199
0.81221498]
0.3890924 ]
0.27669201]
0.82699289]
0.26473768]
0.11066562]
0.9460158 ]
0.5468556 ]
0.88778227]
0.62228038]
0.43464254]
[0, 1, 2, 3]
Ahora iteramos cobre la lista de ndices, y obtenemos la columna con dicho ndice.
In [70]: # Iteramos sobre los indices
for columna_indice in columnas_indices:
columna = matriz[:, columna_indice]
print 'Columna ->', columna
Columna -> [
0.64436161
0.27997485
Columna -> [
0.16414114
0.61570686
Columna -> [
0.44007561
0.9446398
Columna -> [
0.11066562
0.9460158
0.50209017
0.94639172
0.11321902
0.14063406
0.46996784
0.38523306]
0.04681606 0.80000167
0.62228038
0.43464254]
Para obtener la columna hemos usado dos puntos (:) para el primer ndice, y el segundo ndice indica la
columna a obtener.
0
0)
1)
2)
3)
es
es
es
es
0.502090172235
0.93851252227
0.503512668155
0.812214978111
1
0)
1)
2)
3)
es
es
es
es
0.946391722895
0.0459454682317
0.972643013526
0.38909239563
Elemento en la posicin
Elemento en la posicin
Elemento en la posicin
Elemento en la posicin
Pasando a otra fila...
(2,
(2,
(2,
(2,
0)
1)
2)
3)
es
es
es
es
0.113219019769
0.603949306323
0.59491067283
0.276692012411
3
0)
1)
2)
3)
es
es
es
es
0.140634055933
0.0468160589185
0.795655732977
0.826992888181
4
0)
1)
2)
3)
es
es
es
es
0.469967837303
0.800001666198
0.472115602726
0.264737679007
5
0)
1)
2)
3)
es
es
es
es
0.644361605365
0.164141136899
0.440075608379
0.110665618834
6
0)
1)
2)
3)
es
es
es
es
0.279974853091
0.615706857967
0.944639802597
0.946015802446
7
0)
1)
2)
3)
es
es
es
es
0.975500614187
0.263639932963
0.917333098006
0.546855598085
8
0)
1)
2)
3)
es
es
es
es
0.610816672115
0.224724457262
0.0609769811169
0.887782270302
Elementos de
Elemento
Elemento
Elemento
Elemento
9
0)
1)
2)
3)
es
es
es
es
0.833818795185
0.834228809286
0.36783316514
0.622280377648
la
en
en
en
en
es
es
es
es
0.38523306417
0.15486906594
0.875121989766
0.434642544714
array([[
[
[
[
[
[
[
[
6.27863252e-01,
2.53047680e-01,
6.55465212e-01,
5.22231227e-01,
5.14321000e-01,
4.45477802e-01,
4.85759883e-01,
4.71693258e-01,
5.21486377e-01,
6.74169283e-01,
4.43192707e-01,
2.56940062e-01,
9.81777857e-01,
1.20286045e-01,
5.90498377e-01,
8.04355646e-01,
8.37745670e-01],
1.78194693e-01],
6.43536900e-01],
4.19094016e-04],
2.90829165e-01],
5.39736460e-01],
9.56797864e-01],
9.18856025e-01]])
3) Reemplazar elementos
for m in filas_indices:
# Iteracin sobre indices de las filas
for n in columnas_indices:
# Iteramos sobre los indices de las columnas
matriz[m, n] = 0