Está en la página 1de 8

Tipos de datos: Matrices

Roberto Álvarez
8/25/2019

Contents
Matrices 1
Creación de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Dimensiones de un matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Operaciones con matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Seleccionar elementos de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Nombres a renglones y columnas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Filtrado de elementos de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Uso de la función which() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Funciones sobre matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Función apply() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
¿Cómo visualizar un objeto rectangular? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Edición de un objeto rectangular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

Matrices
Una matriz es un arreglo rectangular de datos del mismo tipo. No. No se pueden mezclar.

Creación de matrices

Para crear una matriz podemos usar la función matrix(). Dicha función requiere de, al menos un vector e
indicar al menos una dimensión.
y <- matrix(c(1,5,8,-4),nrow=2,ncol=2)
y

## [,1] [,2]
## [1,] 1 8
## [2,] 5 -4
Se el indica el numero de renglones y el número de columnas como opción usando nrow y ncol respectivamente.
La matriz se llena por renglones hasta completarse
z<-matrix(c(TRUE, FALSE,rep(c(TRUE, FALSE),3)),nrow=4)
z

## [,1] [,2]
## [1,] TRUE TRUE
## [2,] FALSE FALSE
## [3,] TRUE TRUE
## [4,] FALSE FALSE
¿Por qué sólo es necesario indicar una dimensión?
Podemos decirle a R que cambie el orden con el que llena la matriz, es decir en lugar de que lo haga por
columnas, lo haga por renglones

1
Figure 1: Escalar, vector y matriz

m <- matrix(c(1,2,3,4,5,6),nrow=2,byrow=TRUE)
m

## [,1] [,2] [,3]


## [1,] 1 2 3
## [2,] 4 5 6

Dimensiones de un matriz

La dimensión de una matriz es el número de renglones y de columnas respectivamente. Se puede obtener


usando la función dim()
dim(y)

## [1] 2 2
dim(z)

## [1] 4 2
Así una matriz se distingue de un vector ya que tiene, además de renglones, columnas.
Una forma mucho menos eficiente de definir una matriz es declarando una matriz sin elementos y después
llenándolos de forma explícita
y <- matrix(nrow=2,ncol=2)
y[1,1] <- "Esta"
y[2,1] <- "es"
y[1,2] <- "una"
y[2,2] <- "matriz"
y

## [,1] [,2]
## [1,] "Esta" "una"
## [2,] "es" "matriz"

2
Operaciones con matrices

Multiplicación de un escalar con una matriz

3*m

## [,1] [,2] [,3]


## [1,] 3 6 9
## [2,] 12 15 18

Suma de dos matrices

m + m

## [,1] [,2] [,3]


## [1,] 2 4 6
## [2,] 8 10 12
n<-matrix(c(2,3,4,5,6,7),ncol=3)
m+n

## [,1] [,2] [,3]


## [1,] 3 6 9
## [2,] 7 10 13
Para sumar matrices deben tener las mismas dimensiones
dim(n)

## [1] 2 3
dim(m)

## [1] 2 3
(dim(n)-dim(m))==0

## [1] TRUE TRUE

Multiplicación de matrices

Se utiliza el operador %*%. Sí. Son tres caracteres. E incluyen dos %. No hay espacios y es un sólo operador .
n<-matrix(c(2,3,4,5,6,7),ncol=2)
n

## [,1] [,2]
## [1,] 2 5
## [2,] 3 6
## [3,] 4 7
m %*% n

## [,1] [,2]
## [1,] 20 38
## [2,] 47 92
¿Recuerdas cuál es el criterio para calcular el producto de matrices? ¿Recuerdas cómo se multiplican dos
matrices?

3
Seleccionar elementos de matrices

Para seleccionar elementos de matrices se hace de forma análoga a vectores, es decir, se utiliza el operador [].
Sólo que esta vez hay que indicar tanto los renglones como la columna en ese orden
m[2,3] # Este es el segundo renglón tercera columna de m

## [1] 6
n[3,2] # Este es el elemento que está en el renglón 3 y columna 2 de la matriz n

## [1] 7

Seleccionar todo(a) un(a) renglón(columna)

Para seleccionar todos los elementos de un renglón dado se utiliza la siguiente sintáxis
m[2,] # Todos los elementos que están en el segundo renglón

## [1] 4 5 6
Para una columna
m[,3] # Toda la tercera columna

## [1] 3 6

Selecccionar elementos de una matriz

¿Qué hace lo siguiente?


m[1:2,1]

## [1] 1 4
m[1:2,2:3]

## [,1] [,2]
## [1,] 2 3
## [2,] 5 6
m[-1,]

## [1] 4 5 6
m[-1,-c(1,3)]

## [1] 5

Nombres a renglones y columnas

Al igual que con vectores le podemos poner nombres tanto a renglones como a columnas para ello utilizamos
rownames() y colnames()
m # No tengo nombres :(

## [,1] [,2] [,3]


## [1,] 1 2 3
## [2,] 4 5 6

4
colnames(m)<-LETTERS[1:3]
rownames(m)<-letters[5:6]
m # Ahora sí. Feos, pero nombres :) :)

## A B C
## e 1 2 3
## f 4 5 6
m["e","C"]

## [1] 3
m["e","C"]==m[1,3]

## [1] TRUE

Filtrado de elementos de matrices

Podemos generar condiciones de filtrado de matrices con condicionales y seleccionar áquellos elementos que
cumplan ciertas condiciones
m<-matrix(1:6, ncol=3)
m

## [,1] [,2] [,3]


## [1,] 1 3 5
## [2,] 2 4 6
m[m[,2] > 3,] # de nuevo, a manera de sugerencia, lee la está instrucción de adentro hacia afuera

## [1] 2 4 6
m[,2]>3

## [1] FALSE TRUE

Uso de la función which()

which(m > 2)

## [1] 3 4 5 6
Observa la diferencia cuando usas sólo la comparación
m > 2

## [,1] [,2] [,3]


## [1,] FALSE TRUE TRUE
## [2,] FALSE TRUE TRUE
En resumen which() te dice quiénes y la sola comparación te regresa un objeto del mismo tipo, en este caso
una matriz, de vectores lógicos que cumplen la condición.

Funciones sobre matrices

Se pueden aplicar funciones, al igual que a los vectores, por ejmplo mean() , sd(), entre otras

5
mean(m)

## [1] 3.5
sd(m)

## [1] 1.870829

Función apply()

Pero eso casi nunca es lo que buscamos, casi siempre queremos aplicar funciones por renglones o columnas.
m<-matrix(runif(100),ncol=10)
m

## [,1] [,2] [,3] [,4] [,5] [,6]


## [1,] 0.2602396 0.95079779 0.02327585 0.6355919 0.10850198 0.09179543
## [2,] 0.8931397 0.22323508 0.14384132 0.5745289 0.53330358 0.41023588
## [3,] 0.4235360 0.55470503 0.71234566 0.8000830 0.44663139 0.68662148
## [4,] 0.1828373 0.11139519 0.91913107 0.7527883 0.61806971 0.74729351
## [5,] 0.9980460 0.63862133 0.33212229 0.5023210 0.12442331 0.79814297
## [6,] 0.2791604 0.48834423 0.09031414 0.7417909 0.67637870 0.71457518
## [7,] 0.4959949 0.07899171 0.69169029 0.9979483 0.51953231 0.92142502
## [8,] 0.0404712 0.23586088 0.06851909 0.5529481 0.58609499 0.27032183
## [9,] 0.3346629 0.59901296 0.61448006 0.5987542 0.68204022 0.40284266
## [10,] 0.9461383 0.53296570 0.86181454 0.7727813 0.07200079 0.26953489
## [,7] [,8] [,9] [,10]
## [1,] 0.16077601 0.3990478 0.1338650 0.06605465
## [2,] 0.76676304 0.7508885 0.8875652 0.96584327
## [3,] 0.08915285 0.9445990 0.8501409 0.16452490
## [4,] 0.54650430 0.6944357 0.8168337 0.34094403
## [5,] 0.16339411 0.5596494 0.8952415 0.60544828
## [6,] 0.82670860 0.4510179 0.7390474 0.32382703
## [7,] 0.64228731 0.5228100 0.8055689 0.29164576
## [8,] 0.23759326 0.2613925 0.8695796 0.50119994
## [9,] 0.72558225 0.3245515 0.2330281 0.96774651
## [10,] 0.55855341 0.5405103 0.1880416 0.67871651
Podemos hacerlo uno a uno, por ejemplo con la siguiente sintaxis
mean(m[,2])

## [1] 0.441393
sd(m[7,])

## [1] 0.2796446
Sin embargo, eso es poco eficiente. Hay una función que nos permite aplicar funciones sobre elementos de
una matriz. Esta función se llama apply()
La sintaxis es
apply(objeto, dimensión, función)
Por ejemplo, si queremos obtener todas las medias por renglón de una matriz
apply(m,1,mean)

6
## [1] 0.2829946 0.6149345 0.5672340 0.5730233 0.5617410 0.5331165 0.5967895
## [8] 0.3623981 0.5482701 0.5421057
Si queremos un vector con las desviaciones estádar de todas las columnas
apply(m,2,sd)

## [1] 0.3416848 0.2742131 0.3509371 0.1486857 0.2420697 0.2766311 0.2813980


## [8] 0.2066379 0.3193441 0.3124406

¿Cómo visualizar un objeto rectangular?

Para visualizar un objeto de este estilo puedes usar la función View() Ojo esta función va con mayúscula
inicial
View(m)

Edición de un objeto rectangular

Usen esta función con precaución!!!!!!!!


edit(m)

## col1 col2 col3 col4 col5 col6


## [1,] 0.2602396 0.95079779 0.02327585 0.6355919 0.10850198 0.09179543
## [2,] 0.8931397 0.22323508 0.14384132 0.5745289 0.53330358 0.41023588
## [3,] 0.4235360 0.55470503 0.71234566 0.8000830 0.44663139 0.68662148
## [4,] 0.1828373 0.11139519 0.91913107 0.7527883 0.61806971 0.74729351
## [5,] 0.9980460 0.63862133 0.33212229 0.5023210 0.12442331 0.79814297
## [6,] 0.2791604 0.48834423 0.09031414 0.7417909 0.67637870 0.71457518
## [7,] 0.4959949 0.07899171 0.69169029 0.9979483 0.51953231 0.92142502
## [8,] 0.0404712 0.23586088 0.06851909 0.5529481 0.58609499 0.27032183
## [9,] 0.3346629 0.59901296 0.61448006 0.5987542 0.68204022 0.40284266
## [10,] 0.9461383 0.53296570 0.86181454 0.7727813 0.07200079 0.26953489
## col7 col8 col9 col10
## [1,] 0.16077601 0.3990478 0.1338650 0.06605465
## [2,] 0.76676304 0.7508885 0.8875652 0.96584327
## [3,] 0.08915285 0.9445990 0.8501409 0.16452490
## [4,] 0.54650430 0.6944357 0.8168337 0.34094403
## [5,] 0.16339411 0.5596494 0.8952415 0.60544828
## [6,] 0.82670860 0.4510179 0.7390474 0.32382703
## [7,] 0.64228731 0.5228100 0.8055689 0.29164576
## [8,] 0.23759326 0.2613925 0.8695796 0.50119994
## [9,] 0.72558225 0.3245515 0.2330281 0.96774651
## [10,] 0.55855341 0.5405103 0.1880416 0.67871651
Ejercicios
1. Genera una matriz con el número de renglones igual al número de tus compañeros. Ponles nombre a
los renglones. Las columnas deben ser número favorito, mes de cumpleaños (1-12), día de cumpleaños
(1-31), número de materias que están llevando este semestre. Agreguen nombre a cada columna
2. Calculen el promedio de materias que llevan
3. Calculen cuál es el mes en el que cumplen años las mayoría, hay algún mes en el que no cumpla años.
4. Hagan los mismo del paso anterior para los días

7
5. ¿Cuál es la desviación estándar de sus números favoritos?

También podría gustarte