Vous êtes sur la page 1sur 31

Vectores y matrices - Python

CI0202. Principios de Informática. Grupo 08


I Ciclo 2019

Ignacio Díaz Oreiro, M.Sc.

Basado en el material del profesor Edgar Casasola


Estructura de un vector

nombre valor valor valor valor ... valor valor

vector de
tamaño n 0 1 2 3 n -2 n -1

nombre[3]
índices celda específica índices

• Un vector se compone de celdas consecutivas que


pueden almacenar valores de un tipo específico. Cada
celda almacena un valor y a cada una se le asocia un
entero conocido como “índice” que es la posición que
ocupa dentro del vector.
Vectores en Python
• En Python podemos implementar vectores mediante
listas

• Entonces, un vector se declara cuando se inicializa

• Posteriormente se pueden guardar y recuperar valores


en celdas independientes accediendo mediante el
índice correspondiente

• También se puede “recorrer” el vector incrementando o


decrementando el valor de una variable entera utilizada
como índice
Crear un vector en Python
• Si utilizamos listas podemos definirlo directamente:
vector_1 = [1,0,1,0]

• También podemos aprovechar las facilidades que provee el


lenguaje (“list comprehension”) y crear un vector de 5
campos inicializado en 0 en todas las posiciones:
ceros = [ 0 for i in range(5)]

• Crearía un vector llamado “ceros” con el siguiente


contenido:
[0, 0, 0, 0, 0]
Guardar y recuperar valores en
celdas de un vector

• Para asignar un valor x a la posición i del vector vec:


vec[i] = x;

• Para asignar a x el valor almacenado en la posición i del


vector:
x = vec[i]; # Denominado como “campo sub i”.
# i se conoce como índice.
Recorrer un vector

• Un vector puede ser fácilmente recorrido por medio de


un ciclo for

• Se entiende por recorrido a una secuencia de accesos


consecutivos a las celdas del vector

• El recorrido se logra variando el valor del índice de


acceso a las celdas del vector
Memoria al asignar un valor
a un campo de un vector

vector ? ? ? 8 ?
0 1 2 3 4
referencia al
vector
Se modifica la
vector[ i ] celda vector[ 3 ]

i 3
índice

vector[3] = 8 #Se asigna a la celda 3 el valor 8


Ejemplo de recorrido sobre un
vector de enteros

2 4 3 1 5
vector
0 1 2 3 4

vector[ i ]
¿Qué sucede si se trata de
acceder al valor de una posición
inexistente?

2 4 3 1 5 ¡Excepción!
vector
0 1 2 3 4

vector[ i ]

i 5
índice
¿Qué sucede si se trata de
acceder al valor de una posición
inexistente? (continuación)
• Si se trata de acceder a una posición no existente se
producirá una excepción (IndexError)

• Significa que se está tratando de acceder a algo que


está fuera de los límites establecidos para el vector

• Utilizar manejo de excepciones try – except


¿Cómo pasar un vector como
parámetro en una función?
• El nombre de un vector es una referencia que
contiene la dirección inicial donde se ubican los
datos asociados al mismo

• Los cambios efectuados a un vector dentro de


un método que lo recibe como parámetro se
mantienen aún después de finalizado el
método
¿Para qué sirven los vectores en
el ciclo de resolución de
problemas?

• Los vectores son estructuras muy importantes en la


mayoría de los lenguajes

• Normalmente sirven para almacenar, procesar, buscar y


recuperar valores específicos dentro de un grupo de
datos
¿Cuáles son los principales usos
que se le dan a los vectores?

Entre los usos comunes que se les pueden dar están:

• Calcular valores nuevos a partir de secuencias de


valores leídos sin perder el detalle de los mismos
• Para ordenar una serie de valores entre sí
• Para buscar si un valor específico pertenece a un grupo
de valores previamente almacenados
• Para asociar valores entre sí
• Para clasificar información
¿Cuáles son los cálculos más
comunes usando vectores?

• Calcular la suma de los valores almacenados

• Calcular el promedio

• Encontrar el mayor valor dentro del vector

• Encontrar el menor valor dentro del vector


¿Cómo calcular la suma?

• Mediante el uso de una variable acumuladora. Se va


sumando cada elemento del vector para finalmente
tener un valor acumulado

• Este tipo de procedimiento es típico y puede utilizarse


para diferentes cálculos incluyendo el del promedio de
un grupo de valores
Promedio de valores de un vector
• Para calcular un promedio bastaría con acumular la
suma y dividir entre el total de elementos que fueron
sumados

• Si el promedio incluye a todos los elementos del vector,


se divid entre el tamaño del vector

• En caso contrario, se utiliza un contador que se


increment en uno cada vez que se suma un valor a la
suma total y al final se divide entre dicho contador

• Un caso típico es promediar solamente los valores


mayores que cero dentro de un vector o que cumplen
con algún criterio de selección específico.
Máximo y el mínimo de un vector

• Otro ejemplo típico de recorrido en vectores incluye el


encontrar la posición del elemento mayor o menor

• Una estrategia es suponer que el valor más alto o más


bajo se encuentra en la primera posición del vector, y
a partir de ahí realizar un recorrido buscando otro
elemento que sea más pequeño que el menor o más
grande que el mayor

• De encontrarse un valor mayor o menor al supuesto


originalmente, se sustituye ese valor y se continua
buscando en el resto del vecto
Matrices

• Una matriz es típicamente una estructura


bidimensional compuesta de celdas.

• Cada celda es identificada por las coordenadas


asociadas a cada una de las dos dimensiones que la
componen.

• La matriz puede ser vista como una tabla compuesta


por filas y columnas.
Representación Gráfica

5 columnas
0 1 2 3 4

0
1 8 7 15 16
1
6 2 14 17 5
4 filas
2
9 10 3 18 10
3
12 11 13 4 20
Implementar una matriz

• En Python, una matriz se puede implementar mediante


una lista de listas

• Se puede declarar e inicializar primero un vector de


filas, y luego declarar e inicializar cada una de las filas
individualmente
Ejemplo en Python

• Si utilizamos listas podemos, por ejemplo, crear una


matriz llamada unos (con “list comprehension”) de 5
filas y 4 columnas, inicializado en 1 en todas las
posiciones:

unos = [ [1 for i in range(4)] for j in range(5) ]

• Crearía una matriz llamada unos con el siguiente


contenido:
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
Visualización en memoria

matriz[0] matriz[0][3]
fila celda
matriz
referencia 0 ...
a la matriz,
que es un 0 1 2 3 m0 -1
vector de 1
referencias
a vectores . ...
. m1 -1
0 1 2 3
.
n -1 ...
0 1 2 3 mn-1 -1
Acceder a las celdas de una matriz

• Para acceder a las celdas de una matriz se debe


referenciar la celda deseada indicando los índices o
coordenadas de la celda dentro de la matriz

• La primera coordenada representa la fila y la


segunda coordenada representa la columna

• En muchos lenguajes de programación se utilizan


paréntesis cuadrados [ ] para indicar las
coordenadas
Acceder a las celdas de una matriz

• La celda ubicada en matriz[2][3]


tiene el valor 12
La primera coordenada corresponde a
las filas y la segunda a las columnas 0 1 2 3 4

•La instrucción matriz[3][1]=88 1 5 6 7 8


asigna un 88 a la celda de la fila 3
columna 1
2 9 10 11 12
• Mediante la manipulación de los
índices se puede llevar a cabo cualquier
recorrido sobre las celdas de una
3 13 88 15 16
matriz
0 1 2 3
Recorrido de matrices

• Dependiendo del problema se puede requerir llevar a


cabo secuencias de acceso a las celdas en forma
consecutiva

• Por ejemplo:
• sumar todos los valores de una fila específica, o de
una columna
• imprimir los valores de las celdas que se encuentran
alrededor de una celda específica

• A estas secuencias de accesos consecutivos se les llama


“recorridos”
Recorrido de matrices
• En esta matriz de 3 filas y 3 columnas
se visitan las celdas en el orden
siguiente:
(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2) 5 12 10
(2,0) (2,1) (2,2)
2 8 45
• Por lo que se imprime la salida: 14 21 37
5 12 10
2 8 45
14 21 37
Recorrido de matrices
En Python podríamos recorrer esta
matriz con la ayuda de dos índices: “i” y
“j”

for i in range ( 0, 3 ): 5 12 10
for j in range ( 0, 3 ):
print( matriz [ i ][ j ] ) 2 8 45

O también 14 21 37

for i in range ( 0, len(matriz) ):


for j in range ( 0, len(matriz[0]) ):
print( matriz [ i ][ j ], end=“” )
print()
Recorrido en dirección específica

• Para calcular la posición de una celda con respecto a


otra con el fin de “recorrer” la matriz en una dirección
específica basta con obtener “nuevas” coordenadas

• Las “nuevas coordenadas” se obtienen a partir de las


“originales” dependiendo de la dirección deseada

• Se debe modificar cada índice de fila y columna ya sea


sumando 1, restando 1 o dejando el valor igual
Recorrido en dirección específica

0 1 2 3 4
1 5 6 7 8
Si la fila se decrementa 2 9 10 11 12
3 13 14 15 16
0 1 2 3
Si la columna se incrementa

Desplazarse ascendentemente en diagonal se logra decrementando la


coordenada de la fila e incrementando la columna en cada iteración.
Movimiento en dirección dada
• El cálculo de las nuevas coordenadas al moverse en una dirección
dada siempre se puede llevar a cabo con una simple suma

• Para subir, a la fila se le suma -1, para bajar se le suma 1

• Para ir a la izquierda, a la columna se le suma -1, para ir a la


derecha se le suma 1

• El siguiente diagrama muestra los valores que hay que sumar a las
coordenadas actuales para desplazarse en la dirección indicada.
Movimiento en dirección dada

(-1, -1) ( -1, 0) (-1, 1)


0
1 2 3
-1
( 0, -1) 1 (0 , 1)
fila 4 5 6
actual
2
+1 7 8 9
0 1 2
(1 , -1) ( 1,1 )
( 1, 0)

-1 +1
columna actual

Vous aimerez peut-être aussi