Documente Academic
Documente Profesional
Documente Cultură
0
¿Qué es numpy?
Numpy es una librería de Python que contiene objetos y funciones especializadas para
computación científica. Provee al lenguaje con herramientas como arreglos n-dimensionales,
matrices, funciones de álgebra lineal, transformadas de Fourier, números aleatorios y más.
Dado que numpy es una librería, es necesario importarla antes de poder usar los objetos y
funciones que posee.
Arreglos en numpy
Un arreglo es un conjunto ordenado de elementos, todos del mismo tipo de dato, indexados por
una tupla de enteros positivos.
Los arreglos de Numpy pueden tener una o más dimensiones. Cada dimensión del arreglo se
conoce como axis o eje. A su vez, el número de axis que tiene un arreglo, es decir el número de
dimensiones, tiene como nombre rank.
Por ejemplo:
El rank del arreglo mostrado es 2, ya que es un arreglo bidimensional, es decir tiene dos axis. La
primera dimensión o axis tiene longitud 2, mientras que el segundo axis tiene longitud de 3.
Atributos de un arreglo
Antes de poder revisar cómo crear arreglos con numpy y sus operaciones básicas, es necesario
indicar algunas de las propiedades que tiene un arreglo de numpy. Numpy nos provee con
sentencias para obtener los valores de dichas propiedades, es importante recordar que estas
sentencias no son funciones así que no llevan llaves al final.
Para fines demostrativos obtendremos las propiedades del arreglo anterior al que llamaremos A.
Las propiedades del arreglo A son:
shape: Nos permite obtener las dimensiones del arreglo. Devuelve una tupla de enteros
con la longitud de cada axis del arreglo.
1
dtype: Nos permite obtener el tipo de datos de los elementos contenidos en el arreglo.
Hay varias maneras de crear un arreglo de numpy la más sencilla es usando la función array de
numpy que toma como entrada un tupla o lista de Python y devuelve una copia de la lista o tupla
pero de tipo array.
Por ejemplo:
Además numpy provee funciones especiales para crear arreglos típicos, estas funciones son:
zeros: Permite crear un arreglo lleno de ceros, recibe como entrada una tupla con la
longitud de los axis del arreglo. Por ejemplo:
ones: Permite crear un arreglo lleno de unos, recibe como entrada una tupla con la
longitud de los axis del arreglo. Por ejemplo:
Otro arreglo típico que podría resultar útil es un arreglo cuyos elementos sean una secuencia de
números enteros, para esto numpy provee la función arange, esta función es análoga a la función
range con la diferencia de que en lugar de devolver una lista, devuelve un arreglo de numpy.
Por ejemplo:
2
Note que el arreglo creado es de rank 1, es decir que solo tiene un axis o dimensión.
Es posible además crear un arreglo cuyos elementos sean una secuencia de números decimales,
para esto numpy nos provee con la función linspace que toma como entrada 3 enteros que
representan el inicio de la secuencia, el final de la secuencia y el número de elementos de la
secuencia respectivamente .
Por ejemplo:
Note que el arreglo devuelto es de rank 1, es decir que solo tiene un axis o dimension.
En la sección anterior revisamos como crear arreglos cuyos elementos sean una secuencia de
números, sin embargo los métodos que nos provee numpy para la creación de los mismo solo
devuelven arreglos unidimensionales, a menudo nos será necesario cambiar las dimensiones de un
arreglo, como en el caso descrito anteriormente, por lo que la librería nos provee con la función
reshape que toma como entrada las nuevas dimensiones del arreglo, es decir que cada número
representará la longitud de un axis del arreglo.
Por ejemplo:
Note que el size del nuevo arreglo es igual al del arreglo original por lo que la multiplicación de los
números en la entrada de la función reshape debe ser igual a size del arreglo original.
3
Operaciones Básicas
Las operaciones aritméticas como la suma, resta, potenciación y demás se efectúan elemento a
elemento para los arreglos de numpy, es decir que multiplicar un entero por un arreglo producirá
un nuevo arreglo con los cada uno de los elementos de arreglo original multiplicado por el entero.
Por ejemplo:
Ademas las operaciones aritmeticas entre arreglos tambien se efectuan elemento a elemento.
Por ejemplo:
Para realizar una multiplicacion matricial entre dos arreglos, numpy nos provee la funcion dot, que
toma como entrada los arreglos a multiplicar y devuelve un nuevo arreglo con el resultado.
Por ejemplo:
4
Suma de los elemetos en un axis de un arreglo
Dado que los arreglos de numpy usualmente son usados para almacenar numeros, cuenta con
funciones especialisadas que solo se pueden realizar sobre arreglos cuyos elementos sean de
algun tipo numero. Este es el caso de la funcion sum que suma todos los elementos de cada fila o
columna de un arreglo, la funcion toma como entrada el axis del que se quiere sumar los
elementos.
Por ejemplo:
En secciones anteriores revisamos como alterar las dimensiones de un arreglo sin modificar sus
elementos, sin embargo a menudo nos será útil añadir nuevos elementos a un arreglo o eliminar
elementos del mismo, para esto Python nos provee las siguientes funciones:
append: Permite añadir un nuevo elemento a un arreglo. Toma como entradas el arreglo
original y los elementos a añadir. La función devuelve una copia de los elementos del
arreglo original con los nuevos elementos añadidos.
Por ejemplo:
Note que el nuevo arreglo es de rank 1, es decir solo tiene una dimension.
delete: Permite eliminar elementos de un arreglo. Toma como entradas el arreglo original
y una lista con los indicies de los numero a eliminar del arreglo.
5
Por ejemplo:
Note que los índices de los elementos a eliminar del arreglo original, son los indicies que
los elementos tuvieran si el arreglo fuera unidimensional.
Matrices
Las matrices de numpy son muy parecidas a los arreglos, con la diferencia de que son únicamente
bidimensionales, es decir tienen 2 axis.
Por ejemplo:
6
Operaciones Básicas
Las operaciones aritméticas para una matriz de numpy son todas operaciones matriciales, es decir
que si se multiplica un escalar por una matriz el resultado será una nueva matriz con los elementos
de la matriz original multiplicados por el escalar, sin embargo si se multiplican dos matrices, el
resultado será la multiplicación matricial de las mismas.
Por ejemplo:
Note que para la multiplicación matricial, se deben usar matrices con las dimensiones correctas
7
Ejercicio de Aplicación
Escriba un programa que dado un arreglo bidimensional con las notas de todos los estudiantes
registrados en la materia fundamentos de programación, calcule el promedio de cada paralelo en
el examen del primer parcial materia. Con esta información, 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, además en cada paralelo hay exactamente el
mismo número de estudiantes N, finalmente existen M paralelos.
Resolución:
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)
8
Slicing de un arreglo de numpy
>>> a = np.arange(10)
>>> print a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Si quisiéramos imprimir cada 3 números empezando entre el segundo valor y el noveno. (recordar
que el primer valor sería el que tiene índice 0, y el noveno tendría de índice 8)
Ahora queremos reemplazar por 100 a los valores desde el tercero al octavo, saltado un lugar
>>> a[2:9:2]=100
>>> print a
[ 0 1 100 3 100 5 100 7 100 9]
9
>>> print a[::-1]
[ 9 100 7 100 5 100 3 100 1 0]
__________________________________________________________
Ahora procederemos a trabajar en dos dimensiones, para esto crearemos la siguiente matriz de
5x4
La tercer fila
10
Ejercicio:
Donde las filas representan 6 estudiantes los cuales están viendo 4 materias. Represente estas
calificaciones en una matriz en numpy.
Solución:
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]
11