English · Español
Fase 6 — Quizzes¶
Espejo legible de
data/quizzes/phase-06-python-engineering.yaml. Las preguntas se centran en el modelo de memoria de NumPy (strides, broadcasting) y los matices de tipos.
Fuente de verdad: data/quizzes/phase-06-python-engineering.yaml.
q-06-01 — ¿Por qué la transpuesta es O(1)?¶
- NumPy crea perezosamente un nuevo buffer en el primer acceso.
- La transpuesta devuelve una vista que comparte el buffer; solo se intercambian shape y strides. La trampa: el resultado ya no es C-contiguo.
- NumPy usa copy-on-write como los procesos Linux.
- La transpuesta está en C y es siempre rápida.
Respuesta
**Opción 2.** `(shape, strides)` cambia de `((3,4),(16,4))` a `((4,3),(4,16))`. El flag `C_CONTIGUOUS=False` es la trampa — el código que asume row-major se degrada silenciosamente.q-06-02 — Broadcasting (opción múltiple)¶
- Los shapes se alinean desde el eje final.
- Dos dimensiones son compatibles si son iguales o si una es 1.
- Un eje de tamaño 1 se replica virtualmente.
(3,)hace broadcast contra(4, 3)→(4, 3).(3,)hace broadcast contra(3, 4)→(3, 4).
Respuesta
**Opciones 1, 2, 3, 4.** La opción 5 falla: `(3,)` se alinea al eje final (tamaño 4), incompatible. Hay que reshapear a `(3, 1)` para hacer broadcast contra `(3, 4)`.q-06-03 — Cálculo de offset en bytes (libre)¶
int32, shape (3, 4), strides (16, 4). ¿Offset en bytes del elemento (2, 3)?
Respuesta
`offset = 2 · 16 + 3 · 4 = 32 + 12 = `**44** bytes.q-06-04 — GIL y trabajo CPU-bound (libre)¶
Respuesta
`matmul` de NumPy **libera el GIL** durante la llamada a BLAS — el trabajo pesado corre en C sin el lock y los hilos paralelizan. Los bucles de Python puro mantienen el GIL en cada operación de bytecode, así que los hilos serializan; para trabajo CPU-bound en Python puro, usa multiprocessing.q-06-05 — Any y mypy --strict¶
Anyes asignable a y desde todo; en cuanto un valor esAny, mypy no puede razonar sobre las operaciones que se le aplican. Implicación práctica: los mejores stubs de numpy 2.x permiten usarNDArray[float32], pero los retornos heredados de tipoAnypierden la información de tipos en la frontera.Anyes sinónimo deNone.- mypy --strict ignora
Any. - numpy está escrito en C y no tiene tipos.