Está en la página 1de 27

Introducción a Numpy

Programación Avanzada
Numpy
• La biblioteca NumPy (Python Numérico) aparece el
año 2006, y es la implementación de array preferida
en Python. Ofrece un tipo array llamado ndarray.
• Las operaciones con arrays están por encima de los 2
órdenes de magnitud más rápidas que con las listas.
• Una fortaleza de NumPy es la programación orientada
a arrays, la cual usa el estilo de programación
funcional con iteración interna.
Importando la biblioteca

import numpy as np

Tipo básico: numpy.ndarray

El tipo básico de numpy es el


numpy.ndarray, el cual llamaremos
aquí frecuentemente "array".
Creando un ndarray
Un vector simple:
import numpy as np
array1 = np.array([1., 2., 3.])
array1
array([1., 2., 3.])

Arrays de Números Complejos


array_complejo = np.array([[2. + 3.j, 1.]], dtype=np.complex)
array_complejo
array([[2.+3.j, 1.+0.j]])
Creación de arrays
La entrada para la creación de arrays debe ser listas
o tuplas:
A partir de una variable lista
lst = [1, 7, 0, 6, 2, 5, 6]
# convirtiendo lista a array
array_lista = np.array(lst)

A partir de una variable tupla


tupla=( 1, 2, 3, 4 )
array_tupla = np.array(tupla)
array_tupla
Inicializando Arrays
Con Ceros:
array_ceros = np.zeros(3)
array_ceros
array([0., 0., 0.])

Con Unos:
array_unos = np.ones(3)
array_unos
array([1., 1., 1.])
Inicialización
• numpy.empty( forma , dtype )
Devuelve una nueva matriz de formas y tipos dados,
sin inicializar entradas.

vec1= np.empty( 4, dtype = int)


vec1
array([ 1,61259232,0, -2147483648])
Rellenar vector con valores en un rango
• numpy.random.randint(a, b, size=N)

Devuelve un array de longitud N de enteros


aleatorios comprendidos en el intervalo [a, b).

np.random.randint(1, 7, 5)
array([5, 2, 6, 4, 2])
El método numpy.where
• numpy.where(condicion)

Devuelve un array de índices de los elementos


que cumplen la condición.

import numpy as np
vec = np.array([1,3,5,7,11])
vec_indices = np.where(vec < 6)
print(vec_indices)
numpy.where con un argumento
• numpy.where(condicion)

Si quisiéramos obtener una serie de elementos del


array en lugar de índices:

import numpy as np
vec = np.array([1,3,5,7,11])
vec_items = vec[np.where(vec < 6)]
print(vec_items)
numpy.where con tres argumentos
numpy.where(condicion,opcionA,opcionB)
import numpy as np
vec = np.array([1,2,3,4,5,6,7,8,9])
nuevo_vec = np.where(vec<5, vec*10, 0)
print(nuevo_vec)
numpy.where con operadores lógicos
• operadores: | (o lógico) & (y lógico)

import numpy as np
vec = np.array([1,2,3,4,5,6,7,8,9])
ind1 = np.where((vec < 3) | (vec > 5))
vectorx = vec[ind1]
print(vectorx)
ind2 = np.where((vec > 3) & (vec < 6))
vectory = vec[ind2]
print(vectory)
Ordenar un array
Devuelve una copia ordenada de un array.
• numpy.sort(array)
# Ordenar un vector de modo ascendente:
a = np.array([5, 3, 1, 4, 2])
np.sort(a)
print(a)

# Ordenar un vector de modo descendente:


a = np.array([5, 3, 1, 4, 2])
np.sort(a)[::-1]
print(a)
Apertura de un fichero

objetoFichero = open(NombreArchivo, "wb")


Abre un archivo para escribir solo en formato binario.

objetoFichero = open(NombreArchivo, "rb")


Abre un archivo para leer solo en formato binario.

objetoFichero = open(NombreArchivo, "ab")


Abre un archivo para añadir solo en formato binario.
Grabar/Cargar array a/de fichero

• numpy.save( fichero, array )


Guarda un array en un archivo binario en formato
NumPy .npy.
vec = np.arange(10)
np.save( f, vec)

• array = numpy.load( fichero)


Carga array a partir de archivos .npy o .npz
vec = np.load(f)
Funciones de Array Numpy
np.amin(array)
Calcula el mínimo en un array Numpy.

np.amax(array)
Calcula el máximo en un array Numpy a lo largo de un eje.

np.sum(array)
Calcula la suma de elementos de un array Numpy. Solo
valores numéricos.

np.average(array)
Calcula el promedio ponderado de un array Numpy.
Atributos Básicos
Número de ejes del array
array1.ndim
1

Forma de un array:
array1.shape
(3,)
Atributos Básicos
Tamaño de un array
array1.size
3

Tipos de los elementos en un array:


array1.dtype
dtype('float64')
Tamaños de los ítems en bytes de un array

array1.itemsize
8

Note que un array de float64 tiene 8 bytes, mientras


que un float32 tiene 4 bytes.
Dirección de los datos en memoria

array1.data
<memory at 0x7f6fa4667288>

matriz1.data
<memory at 0x7f6fb8067630>

matriz1_32.data
<memory at 0x7f6fb8067b40>

En Python, generalmente no utilizamos ese tipo de


información.
Creación de arrays a partir de intervalos

secuencia_1 = np.arange(start=2, stop=10, step=2)


secuencia_1
array([2, 4, 6, 8])
o

secuencia_2 = np.linspace(start=2, stop=8, num=4)


secuencia_2
array([2., 4., 6., 8.])

linspace controla el inicio y el fin (que estará incluido). Tiene como entrada del tercer argumento la
cantidad de puntos que habrá entre el inicio y el fin. El incremento será consecuencia de eso.
Ejemplo de uso de arange

secuencia_1 = np.arange(start=30, stop=50, step=2)


secuencia_1

Ejemplo Obtiene los enteros pares de 30 a 48


Operaciones aritméticas
Con numpy, las operaciones aritméticas son
realizadas elemento por elemento del array.

a = np.arange(5)
a
array([0, 1, 2, 3, 4])

b = np.arange(0, 50, 10)


b
array([ 0, 10, 20, 30, 40])
Operaciones aritméticas
suma = a + b a= [0, 1, 2, 3, 4]
resta = b - a b= [ 0, 10, 20, 30, 40]
potencia = a ** 2
division = b[1:] / a[1:]
producto = a * b

print(suma) # [ 0 11 22 33 44]
print(resta) # [ 0 9 18 27 36]
print(potencia) # [ 0 1 4 9 16]
print(division) # [10. 10. 10. 10.]
print(producto) # [ 0 10 40 90 160]
concatenar arreglos
numpy.concatenate( (a1 , a2 , ...) )
Une una secuencia de arrays a lo largo de un eje
existente.

vec1 = np.array([1, 2, 3, 4])


vec2 = np.array([5, 6])

u2=np.concatenate( (vec1, vec2) )


u2
array([1, 2, 3, 4, 5, 6])
desplazar elementos en arreglos
numpy.roll( array , desplazamiento )
Desplaza elementos del array a lo largo de un eje
dado. Los elementos que salen más allá de la última
posición se reintroducen en la primera.

>>> x = np.arange(10)
>>> np.roll(x, 2)
array([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])
>>> np.roll(x, -2)
array([2, 3, 4, 5, 6, 7, 8, 9, 0, 1])
A Practicar!!

Desarrollar los ejercicios(1 al 4) de la


página 2 de la guía de Laboratorio 3.2.

También podría gustarte