Tiza Paso a paso
Practicar →

Pensamiento Computacional · Unidad 6 — Bibliotecas de Python

Bibliotecas y NumPy

Una biblioteca es código que ya está hecho. NumPy trae arrays, que se parecen a las listas pero operan sobre todos los elementos a la vez.

Practicar este tema →7 ejercicios que te corrigen paso a paso · gratis, sin cuenta

La explicación

Importar

import numpy                 → numpy.array(...)
import numpy as np          → np.array(...)
from numpy import array   → array(...)

La segunda forma es la convención universal. np para NumPy y pd para Pandas se escriben así en todos lados; conviene respetarlo para que tu código se lea como el de todo el mundo.

Arrays: parecen listas, pero no lo son

import numpy as np
a = np.array([1, 2, 3])

Se indexa y se recorre igual. La diferencia está en las operaciones:

np.array([1,2,3]) * 2   → [2 4 6]         multiplica cada uno
[1,2,3] * 2             → [1,2,3,1,2,3]   repite la lista
np.array([1,2]) + np.array([3,4])  → [4 6]        suma posición a posición
[1,2] + [3,4]                     → [1,2,3,4]   pega una atrás de otra
Este contraste es lo más importante del tema. El mismo + y el mismo * hacen cosas distintas según qué tengas. Un programa que "da cualquier cosa" con números suele ser una lista donde había que usar un array, o al revés.

Operar sin ciclo

Con listas, duplicar cada elemento pide un for. Con arrays no:

# lista
dobles = []
for n in numeros:
    dobles.append(n * 2)

# array
dobles = numeros * 2

Eso se llama vectorizar, y además de ser más corto es muchísimo más rápido cuando hay muchos datos, porque la cuenta se hace por fuera de Python.

Funciones útiles

a.sum()     a.mean()     a.max()     a.min()
np.arange(0, 10, 2)   como range, pero array
np.zeros(5)                cinco ceros

Cuántas dimensiones y cuántos elementos

import numpy as np

m = np.array([[1, 2, 3], [4, 5, 6]])
print(m.ndim)    # 2: filas y columnas
print(m.shape)   # (2, 3): 2 filas de 3
print(m.size)    # 6: todos los elementos
print(len(m))    # 2: sólo cuenta las filas

Un array puede tener filas y columnas, como una tabla. ndim dice cuántas dimensiones tiene (1 para una fila de números, 2 para una tabla), shape cuánto mide cada una, y size cuántos elementos hay en total, que es el producto de los números de shape. Ojo con len: en una tabla cuenta las filas, no los elementos.

Un ejercicio resuelto, paso a paso

Tenés las temperaturas de la semana en grados Celsius y las querés en Fahrenheit. ¿Cuál es la diferencia entre hacerlo con lista y con array?

La fórmula es F = C × 9/5 + 32.

Con lista, hace falta un ciclo:

celsius = [20, 25, 18]
fahrenheit = []
for c in celsius:
    fahrenheit.append(c * 9/5 + 32)

Con array, es una línea:

import numpy as np
celsius = np.array([20, 25, 18])
fahrenheit = celsius * 9/5 + 32

Las dos dan [68, 77, 64.4].

Fijate que en la versión con array, celsius * 9/5 multiplica cada temperatura, y + 32 le suma 32 a cada resultado. Si celsius fuera una lista común, esa misma línea daría cualquier cosa: lista * 9 repetiría la lista nueve veces y después /5 tiraría TypeError.

Cuándo usar cada una. Para pocos datos y cosas variadas, lista. Para muchos números sobre los que hacés cuentas, array. La unidad 6 entera va en esa dirección: herramientas para cuando los datos son muchos.

Control: 20 °C tienen que dar 68 °F, que es el dato que todos conocen. Si te da otra cosa, revisá el orden de las operaciones.

Y uno del nivel del parcial

Con las notas de un curso, calcular el promedio, el desvío estándar, cuántas están aprobadas y las notas llevadas a escala 0-100. Hacerlo con NumPy y comparar con la versión que usa listas.

Los datos y la diferencia entre las dos estructuras:

import numpy as np

lista = [4, 7, 9, 2, 8] # lista comun
notas = np.array([4, 7, 9, 2, 8]) # array de NumPy

La diferencia no es de sintaxis: es de qué significa una operación. Con un array, las operaciones se aplican a todos los elementos a la vez; con una lista, hay que escribir el recorrido.

El promedio:

notas.mean() # 6.0
sum(lista) / len(lista) # 6.0, con listas

Cuántas están aprobadas, que es donde más se nota:

(notas >= 7).sum() # 3

cantidad = 0 # con listas, un ciclo
for n in lista:
    if n >= 7:
        cantidad = cantidad + 1

notas >= 7 no devuelve True o False: devuelve un array de booleanos, uno por nota, [False, True, True, False, True]. Y como en Python True vale 1, sumarlo cuenta cuántos hay. Ese patrón —comparar y después sumar— resuelve casi todos los "cuántos cumplen".

El escalado a 0-100:

notas * 10 # array([40, 70, 90, 20, 80])
[x * 10 for x in lista] # [40, 70, 90, 20, 80]

El desvío estándar, que con listas habría que escribir a mano:

notas.std() # 2.6077

El control a mano del desvío, para no depender de la biblioteca:

promedio = 6
desvíos: -2, 1, 3, -4, 2
cuadrados: 4, 1, 9, 16, 4  → suma 34
34 / 5 = 6.8  → √6.8 = 2.6077 ✓

Un detalle que aparece en los parciales: np.std() divide por n (desvío poblacional). Si el enunciado pide el muestral, que divide por n−1, hay que pedirlo: notas.std(ddof=1), que da 2.9155. Los dos son "el desvío estándar" y hay que saber cuál se está calculando.

Cuándo conviene cada una:

lista:  pocos datos, tipos mezclados, agregar y sacar elementos
array: muchos datos, todos del mismo tipo, cuentas sobre todos

Un array no se puede agrandar como una lista con append: tiene un tamaño fijo desde que se crea. A cambio, guarda los números uno al lado del otro en memoria y las operaciones son mucho más rápidas — con un millón de notas, la diferencia es de segundos a milisegundos.

El resumen de lo que devuelve cada cosa:

promedio = 6.0
desvío   = 2.6077
aprobadas = 3
escaladas = [40, 70, 90, 20, 80]
máximo   = 9

Dónde se pierde el punto: escribir lista * 10 esperando que multiplique. Con una lista, * repite: [4, 7] * 2 da [4, 7, 4, 7]. Con un array multiplica cada elemento. Es el mismo símbolo y hace dos cosas distintas.

Dónde se cae la mayoría

Hasta acá la explicación. La práctica es la otra mitad: 7 ejercicios de este tema, en cuatro niveles, que no te dicen sólo si está bien al final sino que te corrigen en cada paso y te explican por qué. Además trae una animación que muestra la idea en movimiento.

Practicar Bibliotecas y NumPy →

Dónde entra este tema en el parcial

Los otros temas de la unidad 6

Bibliotecas de Python

Ver todos los temas de Pensamiento Computacional