Paquete para cómputo científico: NumPy o Numeric Python. Permite:
NumPy ya está instalado en Anaconda, pero si trabaja fuera de este entorno es posible que necesite instalarlo así:
pip3 install numpy # pip3 es la versión del instalador pip para Python 3
import numpy as np # importamos la librería NumPy como np
vector = np.array([2, 4, 6]) # ndarray
lista = [1, 3, 5] # lista
print(vector) # pares
print(lista) # impares
# añadiendo un valor a una lista con append
lista.append(7)
print(lista)
# añadiendo un nuevo elemento a un array --> ¡Sorpresa!
print(vector + np.array(8)) # no añade 8 al array de los pares, lo que hace es sumarlo a todos
vector+np.array(8) # si no ponemos print aparece como: array([10, 12, 14])
np.append(vector, 8) # para hacer un append con un ndarray
# sumando listas
a = [1, 2, 3]
b = [4, 5, 6]
print(a + b) # la suma de listas es una concatenación
# sumando arrays
x = np.array(a)
y = np.array(b)
print(x + y) # la suma de arrays si suma los valores como en álgebra
Supongamos que tenemos dos listas una con la altura de 11 personas y otra con su peso.
Deseamos poder calcular el IMC (Índice de Masa Corporal) ratio que es peso / altura**2.
altura=[1.6, 1.71, 1.82, 1.52, 1.59, 1.95, 1.71, 1.75, 1.66, 1.56, 1.99]
peso=[48.8, 57.4, 87.2, 39.5, 51.5, 97.4, 55.2, 52.2, 52.7, 50.6, 76.1]
type(peso)
list
Veamos que al calcular el IMC con listas obtenemos un error.
#IMC = peso / altura**2 # TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'
Vamos ahora a ver que los ndarray son mucho más flexibles.
Primero los creamos.
import numpy as np # Importamos la librería NumPy
np_peso = np.array(peso) # creamos el array para el peso
np_altura = np.array(altura) # creamos el array para la altura
print(type(np_peso)) # veamos el tipo de un ndarray
np_altura # mostramos el array para la altura, así se ve un ndarray
<class 'numpy.ndarray'>
array([1.6 , 1.71, 1.82, 1.52, 1.59, 1.95, 1.71, 1.75, 1.66, 1.56, 1.99])
Finalmente calculamos el IMC de forma sencilla y elegante.
IMC = np_peso / np_altura**2
IMC
array([19.0625 , 19.62997162, 26.32532303, 17.09660665, 20.37102963, 25.61472715, 18.87760337, 17.04489796, 19.12469154, 20.79224195, 19.21668645])
# Funciona el referirnos a los elementos del vector por el índice
IMC[2] # muestra el tercer elemento del array
IMC > 23 # obtenemos un vector con verdaderos y falsos
# muestra los elementos con sobrepeso
IMC[IMC > 23] # muestra solo los valores de IMC que son True en el vector
Vamos a realizar un gráfico con la nube de puntos entre peso (x) y altura (y).
También necesitamos importar la librería matplotlib para la representación gráfica.
import matplotlib.pyplot as plt
x = np_peso
y = np_altura
plt.scatter(x, y) # scatter para nube de puntos y plot para líneas
plt.xlabel("Peso (Kg)")
plt.ylabel("Altura (m)")
#plt.show() # muestra el gráfico
plt.grid() # muestra el gráfico con rejilla
import numpy as np
numeros_primos=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29] # esto es una lista normal
numeros_primos
Creando un array en numpy a partir de una lista.
array_primos = np.array(numeros_primos)
array_primos # se parece a una lista normal, pero es un objeto llamado ndarray
Inicializando un array con ceros en numpy.
array_zeros=np.zeros(10)
array_zeros
Crear arrays con números.
array_numeros = np.arange(10)
array_numeros
Creando arrays de series de números con un cierto paso.
array_pares = np.arange(0, 20, 2)
array_pares
Haciendo un reshape para dos dimensiones
array_pares.reshape(2, 5) # obtenemos una matriz de 2 filas y 5 columnas
La forma habitual de obtener una matriz de dos dimensiones.
Partimos de una lista de listas que vamos a llamar lista2d.
Tiene 3 filas y 4 columnas. Es de dimensión 3×4.
lista2d = [[11,12,13,14], [21,22,23,24], [31,32,33,34]]
lista2d
Convertimos la lista de listas en un ndarray.
matriz2d = np.array(lista2d) # al ndarray le llamamos matriz2d
matriz2d
Veamos otro caso con reshape de dimensión 3×5.
Observe que 3×5=15.
m = np.arange(15).reshape(3, 5)
m
Cree una matriz de 20 elementos de números aleatorios entre 10 y 99, con 4 filas.
from random import sample
lista = sample(range(10, 100), 20)
array=np.array(lista)
m = array.reshape(4, 5)
m