Matrices con R, Python y Octave
1.10 Matrices con R
Para crear una matriz fila,
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
Para crear una matriz columna,
[,1]
[1,] 1
[2,] 2
[3,] 3
Para crear matrices se utiliza la instrucción matrix()
[,1] [,2] [,3] [,4]
[1,] 1 1 3 5
[2,] 2 4 3 -2
[3,] -2 2 -1 3
[,1] [,2] [,3]
[1,] 1 3 1
[2,] 0 3 -2
[3,] 2 2 3
- Los datos de la matriz deben ir en un vector
c()
- Hay que indicar el número de filas y/o columnas con
nrow
oncol
, respectivamente - Debemos utilizar el parámetro lógico
byrow
para indicar si hemos escrito los números del vector por filas o por columnas
También podemos crear matrices con las funciones bind()
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Para acceder a un elemento/fila/columna de una matriz se sigue la sintaxis A[i,j]
, donde \(i\) indica la fila y \(j\), la columna
[1] -1
[1] 1 1 3 5
[1] 3 3 2
Además, no necesariamente tiene por qué ser simplemente un número lo introducido por parámetro, también puede ser un vector de posiciones con el cual llamar a varias filas o columnas a la vez según pertoque.
Para crear una matriz de ceros,
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
Para crear una matriz de unos,
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
Para crear una matriz diagonal, utilizamos la función diag()
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 0 0 0 0 0
[2,] 0 2 0 0 0 0
[3,] 0 0 3 0 0 0
[4,] 0 0 0 4 0 0
[5,] 0 0 0 0 5 0
[6,] 0 0 0 0 0 6
Para obtener los elementos de la diagonal de una matriz, utilizamos la función diag()
introduciendo por parámetro la matriz pertinente:
[1] 1 -1 2
Para obtener el número de filas o columnas de una matriz, utilizamos las funciones nrow()
o ncol()
, respectivamente:
[1] 3
[1] 3
Y, si queremos la dimensión de la matriz, utilizamos la función dim()
, la cual nos devuelve un vector de dos entradas: el primero, el número de filas y, el segundo, el de columnas:
[1] 3 3
La función sum()
aplicada a una matriz calcula la suma de todos los elementos de dicha matriz:
[1] 16
Las sumas por filas o por columnas se calculan del siguiente modo
[1] 2 6 8
[1] 6 2 8
La función prod()
aplicada a una matriz calcula el producto de todos los elementos de dicha matriz:
[1] 0
La función mean()
aplicada a una matriz calcula la media (aritmética) de todos los elementos de dicha matriz:
[1] 1.777778
Las medias por filas o por columnas se calculan del siguiente modo
[1] 0.6666667 2.0000000 2.6666667
[1] 2.0000000 0.6666667 2.6666667
La transpuesta de una matriz se consegue aplicando la función t()
[,1] [,2] [,3]
[1,] 1 0 1
[2,] 2 -1 5
[3,] 3 3 2
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 0 -1 3
[3,] 1 5 2
Para calcular la traza de la matriz (la suma de los elementos de la diagonal):
[1] 2
La suma de matrices:
[,1] [,2] [,3]
[1,] 2 2 5
[2,] 7 5 10
[3,] 12 8 15
[,1] [,2] [,3]
[1,] 2 2 5
[2,] 7 5 10
[3,] 12 8 15
El producto de un esclalar por una matriz:
[,1] [,2] [,3]
[1,] 5 10 15
[2,] 20 25 30
[3,] 35 40 45
El producto de matrices:
[,1] [,2] [,3]
[1,] 22 0 28
[2,] 49 0 64
[3,] 76 0 100
[,1] [,2] [,3]
[1,] 15 18 21
[2,] 31 38 45
[3,] 47 58 69
Fijaos que el producto de matrices se consigue aplicando %*%
y no *
.
En el segundo caso, lo que hace R
es devolver como resultado una matriz \(C = (c_{ij})\) cuyos elementos son \(c_{ij}=a_{ij}\cdot b_{ij}\).
[,1] [,2] [,3]
[1,] 1 0 6
[2,] 12 0 24
[3,] 35 0 54
Para comprobar que dos matrices son iguales, utilizamos el operador lógico ==
[,1] [,2] [,3]
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
[3,] TRUE TRUE TRUE
[,1] [,2] [,3]
[1,] FALSE FALSE FALSE
[2,] FALSE FALSE FALSE
[3,] FALSE FALSE FALSE
Con que haya un FALSE
, sabemos que son diferentes
Para calcular la potencia \(n\)-ésima (aproximada) de una matriz, utilizamos la función mtx.exp()
, del paquete Biodem
[,1] [,2] [,3]
[1,] 7560 9288 11016
[2,] 17118 21033 24948
[3,] 26676 32778 38880
Para calcular la potencia \(n\)-ésima (aproximada) de una matriz, utilizamos %^%
, del paquete expm
[,1] [,2] [,3]
[1,] 7560 9288 11016
[2,] 17118 21033 24948
[3,] 26676 32778 38880
El rango de una matriz se calcula con la función qr()$rank
[1] 2
La inversa (aproximada) de una matriz (invertible) se calcula mediante la función solve()
[,1] [,2] [,3]
[1,] 2.125 -0.375 -0.125
[2,] -1.375 0.125 0.375
[3,] -1.125 0.375 0.125
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
1.11 Matrices con Python
Utilizaremos la librería numpy
. Para crear una matriz fila,
[1, 2, 3]
Para crear una matriz columna,
[[1], [2], [3]]
Para crear una matriz,
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Para llamar a un elemento, utilizamos la sintaxis siguiente:
5
La primera posición indica la fila y, la segunda, la columna.
Python
, al contrario que en R
, las posiciones empiezan en 0.
1
Para llamar a una fila,
[1, 2, 3]
Cambiémosle la sintaxis a la matriz, para poder trabajar correctamente con ella:
[[1 2 3]
[4 5 6]
[7 8 9]]
La función np.array()
tiene un parámetro, dtype
, en el cual podemos indicar el tipo de dato de la matriz: int, float, complex…
[[1.+0.j 2.+0.j 3.+0.j]
[4.+0.j 5.+0.j 6.+0.j]
[7.+0.j 8.+0.j 9.+0.j]]
[[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
Para llamar a un elemento, utilizamos la sintaxis mostrada anteriormente:
3
Para llamar a una fila,
[4 5 6]
También nos sirve la sintaxis
array([4, 5, 6])
Para llamar a una columna,
array([1, 4, 7])
Para crear una matriz de ceros, utilizamos la función np.zeros((fil,col))
:
[[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.]]
Para crear una matriz de unos, utilizamos la función np.ones((fil,col))
:
[[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.]]
Para crear una matriz diagonal hacemos lo siguiente:
array([[1, 0, 0, 0],
[0, 2, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 4]])
Y para obtener la diagonal principal de una matriz, utilizamos de nuevo la función numpy.diag()
array([1, 2, 3, 4])
Para saber la dimensión de una matriz, utilizamos la función np.shape()
:
(3, 3)
Si queremos la suma de todos los elementos de una matriz:
45
Si queremos la suma por filas
array([12, 15, 18])
Si queremos la suma por columnas
array([ 6, 15, 24])
Si queremos el producto de todos los elementos de una matriz:
362880
Si queremos la media aritmética de todos los elementos de una matriz:
5.0
Si queremos la media aritmética por filas o columnas:
array([4., 5., 6.])
array([2., 5., 8.])
Para calcular la transpuesta de una matriz, utilizamos la función .transpose()
:
[[1 4 7]
[2 5 8]
[3 6 9]]
Para calcular la traza de una matriz:
15
Suma de matrices:
[[4 2]
[3 4]]
El producto de un escalar por una matriz:
[[ 5 10]
[10 0]]
Producto de matrices:
[[5 8]
[6 0]]
Observad que si utilizáis la sintaxis A*B
, se multiplican elemento a elemento, como ocurría en R
.
[[3 0]
[2 0]]
Para calcular la potencia de una matriz:
[[65 58]
[58 36]]
Para calcular el rango de una matriz, utilizamos np.linalg.matrix_rank()
2
2
Para calcular la inversa:
[[ 0. 0.5 ]
[ 0.5 -0.25]]
[[1. 0.]
[0. 1.]]
1.12 Matrices con Octave
Para crear una matriz fila,
row =
1 2 3
Para crear una matriz columna,
col =
1
2
3
Entonces, para crear una matriz:
M =
1 2 3
4 5 6
7 8 9
Para llamar a un elemento, utilizamos la sintaxis
ans = 1
Para llamar a una fila,
ans =
4 5 6
Para llamar a una columna
ans =
3
6
9
Para saber el tipo de una matriz, lo que hacemos es utilizar la función matrix_type()
ans = Full
ans = Upper
Para crear una matriz de ceros, utilizamos la función repmat(0,m,n)
donde \(m\) son el número de filas y \(n\) el de columnas:
O =
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
Para crear una matriz de unos, utilizamos una sintaxis similar a la anterior:
ones =
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
Para crear una matriz diagonal:
N =
Diagonal Matrix
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
0 0 0 0 5
Para obtener la diagonal principal de una matriz:
diagonal =
1
2
3
4
5
Para saber la dimensión de una matriz, hacemos uso de la función size()
ans =
3 3
Para sumar todos los elementos de una matriz:
suma = 45
Para sumar los elementos de una matriz por filas:
sumaFil =
6
15
24
Para sumar los elementos de una matriz por columnas, basta simplemente
sumaCol =
12 15 18
o bien
sumaCol =
12 15 18
Para multiplicar los elementos de una matriz:
producto = 362880
Para calcular la media los elementos de una matriz:
media = 5
Para calcular la media los elementos de una matriz por filas
mediaFil =
2
5
8
Para calcular la media los elementos de una matriz por columnas basta simplemente
mediaCol =
4 5 6
O bien
mediaCol =
4 5 6
Para calcular la transpuesta de una matriz, utilizamos el apostrofe, '
ans =
1 4 7
2 5 8
3 6 9
Para calcular la traza de una matriz, utilizamos la función trace()
:
ans = 4
ans = 2
Suma de matrices:
ans =
3 0
-1 3
Producto de un escalar por una matriz:
ans =
2 -2
0 6
Producto de matrices:
ans =
3 1
-3 0
Potencia de matrices:
ans =
1 -13
0 27
ans =
5 4
-4 -3
Para calcular el rango de una matriz, utilizamos la función rank()
:
ans = 2
ans = 2
Para calcular la inversa de una matriz, hacemos uso de la función inv()
ans =
1.00000 0.33333
0.00000 0.33333
ans =
1.00000 -0.00000
0.00000 1.00000