typestar

Por qué vectorizar en Python

La misma suma de tres maneras, y la razón por la que numpy existe.

import timeit

import numpy as np

valores = np.arange(100_000, dtype=np.float64)


def con_bucle():
    total = 0.0
    for valor in valores:
        total += valor
    return total


def con_numpy():
    return valores.sum()


bucle = timeit.timeit(con_bucle, number=3) / 3
rapido = timeit.timeit(con_numpy, number=3) / 3
print(f"bucle {bucle * 1000:.1f} ms")
print(f"numpy {rapido * 1000:.3f} ms")
print(f"{bucle / rapido:.0f}x")

Cómo funciona

  1. Un bucle de Python paga costo de intérprete por elemento.
  2. Una ufunc hace el bucle en código compilado.
  3. timeit sobre un arreglo chico puede engañar: mide con el tamaño real.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
23
Caracteres a escribir
408
Tokens
122
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 67 segundos.

Escribe este fragmento

Paso 4 de 4 en Matemática y memoria; paso 19 de 22 en NumPy.

← Anterior Siguiente →