You are on page 1of 49

Unidad 5 Arreglos

N-dimensionales
FUNDAMENTOS DE PROGRAMACIN
Arreglos N-dimensionales (ndarray)
Contenedor multidimensional/Tabla de elementos del mismo tipo y de tamao definido.

Matriz Python Dimensiones Tamao


1 2 45 67 [1,2,45,67] 1 Dimensin 1x4
(Unidimensional)
34 3 78 [[34,3,78], 2 Dimensiones 2x3
89 10 23 [89,8,23]]
Numpy
Librera fundamental para clculos cientficos utilizando arreglos multidimensionales.

import numpy as np

Numpy trabaja principalmente con arreglos multidimensionales homogeneos


Instalando Numpy
Si al momento de importar la librera Numpy se genera un mensaje indicando que el
modulo/librera no se encuentra instalado debemos:
Abrir una consola (cmd)
Tipear

Instalando
Crear arreglos
import numpy as np
arr = np.array([1,2,45,67]) arr = np.array([1.0,2.5,45.6,67.90])
print(arr) print(arr)

[ 1 2 45 67] [ 1. 2.5 45.6 67.9]

arr2 = np.array([[1,2,3],
[4,5,6]]) >>> a = np.array(1,2,3,4) # WRONG
print(arr2) >>> a = np.array([1,2,3,4]) # RIGHT
[[1 2 3]
[4 5 6]]
Manipular elementos en ndarray
Acceder a un elemento
print (arr[0], arr[1], arr[2]) array([1,2,45,67])
1 2 45

print (arr2[0,1], arr2[1,0], arr2[1,2]) array([[1,2,3],


246
[4,5,6]])

Asignar un valor a un elemento

arr[0] = 47 arr2[0,1] = 10
[[ 1 10 3]
[47 2 45 67]
[ 4 5 6]]
type, axes, rank

Axes Rank ndarray

Dimensiones/ejes Nmero de axes El tipo de dato de


arreglos en
Numpy. Ttambin
conocido como
array
Propiedades
Propiedad Definicin Ejemplo
ndim Devuelve el nmero de axes (dimensiones) de un arreglo (rank) >>arr2.ndim
2
shape Devuelve las dimensiones de un array en formato de tupla de enteros indicando >>arr2.shape
el tamao del arreglo en cada dimensin. (2, 3)
Para una matriz con n-filas and m-columnas, shape devolver (n,m).
La longitude de la tuple representa el rank

size Devuelve el nmero total de elementos en un arreglo. Resultado de n x m >>arr2.size


6
dtype Devuelve un objeto que describe a los elementos dentro de un arreglo. Se pueden >>arr2.dtype
utilizar tipos de datos definidos por Python o se pueden utilizar los provistos por Int32
NumPy e.g. numpy.int32, numpy.int16, and numpy.float64.
Ejercicio
Indique el:
Nmero de dimensiones de los arreglos
Dimensiones de los arreglos
Nmero de elementos de los arreglos
[[[ 2 4] [[ 2 4]
[[[ 2 4 6 8] [10 12] [10 12]
[10 12 14 16] [18 20]] [ 1 3]
[18 20 22 24]]] [ 6 9]]
[[ 1 3]
[6 9]
[11 13]]]

Rank : 3 Rank : 3 Rank: 2


Dimensiones: (1, 3, 4) Dimensiones: (2, 3, 2) Dimensiones : (4, 2)
Elementos: 12 Elementos : 12 Elementos : 8
Inicializacin ndarrays
zeros Inicializa un arreglo con ceros(0)

ones Inicializa un arreglo con unos (1)

Inicializa un arreglo con valores vacos. No necesariamente coloca


empty ceros.

Full Inicializa un arreglo con un valor constante

random.random Genera nmeros aleatorios entre [0,1)


Creacin de arreglos con valores
aleatorios
random.randint: Devuelve un arreglo con nmeros aletorios enteros dentro de un rango
especificado [desde,hasta).

np.random.rand(desde, hasta, size = (fil,cols))

desde: valor mnimo que puede Tupla con el nmero de


tener el arreglo aleatorio. Si elementos por eje
hasta no se especifica, desde
toma su valor y su valor inicial ser nmero de elementos por
cero (0) eje separados por comas.
Creacin de arreglos con valores
aleatorios
>>> np.random.randint(2, size=10)
array([0, 0, 0, 0, 0, 0, 1, 1, 1, 0])
>>>
>>> np.random.randint(5, size=(2, 4))
array([[0, 4, 1, 1],
[4, 2, 3, 0]])
>>>
>>> np.random.randint(1,6, size=(2, 4))
array([[4, 5, 1, 3],
[2, 5, 4, 1]])
Generando secuencias
arrange
Crea secuencias de nmeros con rank 1. Similar a range. Devuelve un
arreglo en vez de una lista.
np.arange(start, end, step )

Linspace
Devuelve un arreglo de valores, rank 1, dado el nmero de elementos
que se deseen.
np.linspace( start, end, number of elements )
>>> np.arange( 10, 30, 5 )
array([10, 15, 20, 25])
>>> np.arange( 0, 2, 0.3 ) # it accepts float arguments
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])

>>> np.linspace( 0, 2, 9 ) # 9 numbers from 0 to 2


array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
Alterar dimensiones de un arreglo
(reshape)
secuencia = np.arange(10)

[0 1 2 3 4 5 6 7 8 9]

secuencia2 = secuencia.reshape(2,5)
[[0 1 2 3 4]
[5 6 7 8 9]]
Operaciones con escalares
Operador Descripcin
+ Suma
- Resta.
* Producto
/ Divisin.
// Divisin entera.
** Potencia.
sqrt Raiz Cuadrada
Funciones con arreglos n-dimensionales
Sum Prod Min Max Argmin Argmax Sort

Devuelve la
Devuelve la Devuelve el Devuelve el
multiplicacin Devuelve el Devuelve el Ordena los
suma de ndice del ndice del
de los mnimo valor mximo valor elementos de
elementos en mnimo valor mximo valor
elementos de en una matriz en una matriz un arreglo.
una matriz en una matriz en una matriz
una matriz

sum(arreglo)
prod(arreglo) min(arreglo) max(arreglo) argmin(arreglo) argmax(arreglo) sort(arreglo)
Aadir/Eliminar elementos
Append Agrega un elemento a una matriz.
Devuelve un arreglo de Rank = 1

Elimina elementos de una matriz.


Delete Los ndices deben enviarse como arreglo []
Devuelve un arreglo de Rank = 1

Transpose Genera la transpuesta de una matriz.


Ejercicio
Escriba un programa, en el cual, dado un arreglo bidimensional con las notas de todos los
estudiantes registrados en la materia fundamentos de programacin, calcule el promedio de
cada paralelo en el examen del primer parcial. Con esta informacin, luego construya un nuevo
arreglo bidimensional en el que cada columna tenga como primer elemento el promedio de un
paralelo, seguido de todas las notas del mismo. Asuma que en cada fila del arreglo original se
encuentran las calificaciones de cada estudiante de un paralelo, adems en cada paralelo hay
exactamente el mismo nmero de estudiantes N, finalmente existen M paralelos.

[[98,96,56,20],
[11,53,85,93],
[78,46,34,73],
[70,60,43,100]]
import numpy as np
# arreglo original con notas de estudiantes
notas = np.array([[98,96,56,20],[11,53,85,93],[78,46,34,73],[70,60,43,100]])
M = notas.shape[0] # numero de paralelos
N = notas.shape[1] # numero de estudiantes
# se calcula el promedio de las notas por paralelo
promedios = notas.sum(axis=1)/(M)
# se transpone el arreglo de notas
notasTraspuesta = notas.transpose()
# Se combina el arreglo de notas traspuestas con el arreglo de promedios

resultado = np.append(promedios,notasTraspuesta)
resultado = resultado.reshape((5,4))
print(resultado)

[[98,96,56,20], [[ 67.5 60.5 57.75 68.25]


[11,53,85,93], [ 98. 11. 78. 70. ]
[78,46,34,73], [ 96. 53. 46. 60. ]
[ 56. 85. 34. 43. ]
[70,60,43,100]]
[ 20. 93. 73. 100. ]]
Operaciones Estadsticas Bsicas
Operacin Definicin Ejemplo
mean() Retorna un valor correspondiente a la MEDIA del arreglo n- arreglo.mean()
dimensional. (Promedio) arreglo.mean(axis=0)

std() Retorna un valor correspondiente la DESVIACIN ESTNDAR del arreglo.std()


arreglo n-dimensional. arreglo.std(axis=0)

var() Retorna un valor correspondientes a la VARIANZA del arreglo n- arreglo.var()


dimensional arreglo.var(axis=0)
Operaciones Estadsticas bsicas
Operaciones Bsicas Estadsticas
Matrces
Similares a los arreglos.
Son nicamente bidimensionales(2 axis).

import numpy as np Rank: 2


lista = [[1,4,5,6],[8,9,5,4]]
matriz = np.matrix(lista)
Estructura: (2, 4)
print("Rank:",matriz.ndim); Num. Elementos: 8
print("Estructura:",matriz.shape); [[1 4 5 6]
print("Num. [8 9 5 4]]
Elementos:",matriz.size);
print(matriz)
Slicing
Slicing
>>> a[0,3:5]
>>> a[4:,4:]
>>> a[:,2]
>>> a[2::2,::2]
Slicing
Ejercicio
Tomando en cuenta que:
NOTAS Matemt. Fisica. Quimica. Anatomia.

Est. 0 100 80 94 75
Est. 1 65 78 76 87
Est. 2 74 96 65 43
Est. 3 98 87 90 95
Est. 4 40 65 59 72
Est. 5 87 49 67 81

Donde las filas representan 6 estudiantes los cuales estn viendo 4 materias. Represente estas calificaciones en
una matriz en numpy.
El profesor de la materia de fsica se equivoc al colocar la calificacin del Est. 3 que en lugar de ser 87 era 97,
corrjala usando lo aprendido.
En Qumica, los 4 primero estudiantes presentaron el mejor proyecto, como recompensa todos recibirn un 100
en la calificacin. Realice este cambio usando una sola lnea de cdigo usando lo aprendido
El Est.4 solicita que se le de las calificaciones de las 3 primeras materias, usando slicing obtener la fila del Est.4
Solucin
c = np.array([[100, 80, 94, 75], [65, 78, 76, 87], [74, 96, 65, 43], [98, 87, 90, 95], [40, 65, 59, 72],
[87, 49, 67, 81]])

1. >>> c[3,1]=97
2. >>> c[:4,3]=100
3. >>> print(c[4, :3])
Indexacin Avanzada

h= h=

[[ 1 2] [[ 1 2 7]

[ 3 4] [ 3 5 9]

[ 4 6]] [ 8 6 4]]

h[ [ 0,1 ],[ 1,0 ] ] h[ [0,2,2],[1,0,2] ]


[7 8 4]
[ 2 3]
Indexamiento Booleano
Permite evaluar un arreglo para retornar un arreglo de valores booleanos indicando todos
aquellos elementos que cumplan con la condicin evaluada

Operadores
Relacionales
a<b
a>b
a == b
a <= b
a >= b
Indexamiento Booleano
Reemplazando Valores
Reemplazar todos los valores iguales a 5 Operadores
Relacionales
z= a<b
[[ 5 7 1]
[ 4 5 9] a>b
[ 8 6 5]] a == b
a <= b
a >= b
for i in range (z.shape[0]):
z[z==5]=1
for j in range (z.shape[1]):
if z[i,j]==5:
z[i,j]=1 Arreglo Condicin Valor
Operador de
Asignacin
Ejercicio
Cree un arreglo de dos dimensiones de tamao 5x5 con valores aleatorios entre cero y seis [0,6).
Ahora reemplace los elementos del arreglo menores o iguales a 3 por 0 y los mayores a 3 con 6.
Esto es, si un elemento tiene como valor 2.53, reemplcelo con el valor de 0. y si tiene un valor
de 4.434 reemplcelo con 6.

z = 6*np.random.rand(10,10)
z[z<=3] = 0
z[z>3] = 6
Validando Arreglos N-Dimensionales
Devuelve True, si todos los valores en el arreglo dan
All verdadero
np.all(condicin)

Any Devuelve True, si al menos un valor da verdadero


np.any(condicin)

Retorna un arreglo con los ndices de los elementos que


Where cumplen con la condicin.
np.where(condicin)
Operaciones en arreglos n-dimensionales
Operaciones Descripcin

np.add(a,b) a+b Suma los elementos uno a uno de un arreglo. Dimensiones deben ser iguales.

np.subtract(a,b) a-b Resta los elementos uno a uno de un arreglo. Dimensiones deben ser iguales.

np.multiply(a,b) a*b Multiplica los elementos uno a uno de un arreglo. Dimensiones deben ser iguales.

np.dot(b) Producto matriz. #Columnas en A = #Filas en B

np.divide(a,b) a/b Divide los elementos uno a uno. Dimensiones deben ser iguales.
Operaciones Aritmticas entre arreglos

>>> notas_1 = np.array([[ 0.13, 8.40, 8.49, 3.58]])


>>> notas_2 = np.array([[ 0.33, 7.72, 4.20, 8.61]])
>>> suma_notas = notas_1 + notas_2
>>> suma_notas
array([[ 0.46, 16.12, 12.69, 12.19]])
Broadcasting (1/3)
Numpy maneja arreglos de diferentes formas durante operaciones aritmticas.
Para realizar broadcast se tiene dos nicas reglas.
Deben tener dimensiones iguales, o
Una de las dimensiones es 1
Broadcasting (2/3)
Broadcasting (3/3)