σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyHojas de rutaRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Hojas de rutaRutas
AO
+1,2 k estudiantes
Iniciar sesión
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyHojas de rutaRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Hojas de rutaRutas
AO
+1,2 k estudiantes
Iniciar sesión
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Ruta de SciPy›Módulo 3 · Matrices, señales y estructura›Tema 3.2·~45 minIntermedio

Matrices dispersas

Posición en la rutaMódulo 3 de 3 · Tema 2 de 5
3.2 Matrices dispersas
—Puntuación del lab— / 100XP total—Racha—

Guardar solo lo que no es cero

Muchas matrices grandes son casi todo ceros. Una malla para valorar una opción tiene una fila por nivel de precio, y cada fila toca solo a sus dos vecinas. Una matriz así se llama dispersa. Guardar cada cero desperdicia memoria y tiempo. scipy.sparse guarda solo las entradas distintas de cero. El formato csr_matrix (fila dispersa comprimida) usa tres listas. data contiene los valores no nulos fila por fila, indices la columna de cada valor, e indptr dice dónde empieza y termina cada fila dentro de data: la fila iii es data[indptr[i]:indptr[i+1]]. El último número de indptr es la cantidad de no nulos, nnz.

Distintos formatos sirven para distintas tareas. coo_matrix guarda simples tripletas (fila, columna, valor) y es la forma fácil de construir una matriz. csr_matrix es rápido para cortes de filas y para el producto AxA\mathbf xAx, que cuesta unas nnz multiplicaciones en lugar de n2n^2n2. csc_matrix es la misma idea por columnas, y dia_matrix guarda diagonales, ideal para matrices de banda. Para un sistema Ax=bA\mathbf x=\mathbf bAx=b, sparse.linalg.spsolve aprovecha los ceros para ser mucho más rápido que una resolución densa. Lo disperso no siempre es mejor: si más de un tercio de las entradas son no nulas, la contabilidad cuesta más de lo que ahorra. En finanzas, la dispersión aparece en mallas de valoración, en modelos de factores donde la mayoría de las exposiciones son cero y cuando solo se conservan las correlaciones fuertes.

Ax costs ≈nnz multiplications,density=nnzn2,row i=data[indptr[i]:indptr[i+1]]A\mathbf x\ \text{costs}\ \approx \mathrm{nnz}\ \text{multiplications},\qquad \text{density}=\frac{\mathrm{nnz}}{n^{2}},\qquad \text{row } i=\texttt{data}[\texttt{indptr}[i]:\texttt{indptr}[i+1]]Ax costs ≈nnz multiplications,density=n2nnz​,row i=data[indptr[i]:indptr[i+1]](1)
Leer una matriz CSRTomemos la matriz 4×44\times44×4 con filas (5;0;0;1)(5;0;0;1)(5;0;0;1), (0;0;2;0)(0;0;2;0)(0;0;2;0), (0;0;0;0)(0;0;0;0)(0;0;0;0) y (3;0;0;4)(3;0;0;4)(3;0;0;4). En CSR, data=[5,1,2,3,4], indices=[0,3,2,0,3] e indptr=[0,2,3,3,5]. La fila 222 está vacía porque indptr[2]=indptr[3]=3, y nnz=5. Multiplicar por (1;1;1;1)(1;1;1;1)(1;1;1;1) suma cada fila y da (6;2;0;7)(6;2;0;7)(6;2;0;7) con solo 555 multiplicaciones. Una matriz tridiagonal con n=1000n=1000n=1000, como una malla de valoración en diferencias finitas, tiene 2 9982\,9982998 no nulos de 1 000 0001\,000\,0001000000 entradas, una densidad del 0,30%0{,}30\%0,30%. Necesita unos 404040 KB en CSR frente a 888 MB densa. Con datos reales, las correlaciones de 555555 acciones del archivo de precios compartido forman una matriz 55×5555\times5555×55. Conservar solo las entradas con ∣ρ∣>0,5|\rho|>0{,}5∣ρ∣>0,5 deja 249249249 de 3 0253\,0253025, el 8,2%8{,}2\%8,2%, y la copia CSR ocupa 3,23{,}23,2 KB frente a 24,224{,}224,2 KB densa. Con ∣ρ∣>0,6|\rho|>0{,}6∣ρ∣>0,6 queda solo el 4,3%4{,}3\%4,3%.
  • Tres listas: data, indices e indptr describen una matriz CSR, e indptr[-1] es el número de no nulos.
  • Construir en COO, calcular en CSR: las tripletas son fáciles de ensamblar, el almacenamiento por filas es rápido para productos y resoluciones.
  • Lo disperso solo compensa si hay sobre todo ceros: una matriz densa es mejor cuando muchas entradas son no nulas.

Lab: qué se califica

  • Contar los no nulos10 pts
  • Cuántos valores hay en una fila10 pts
  • La densidad de una malla10 pts
  • Un producto disperso15 pts
  • Qué formato para qué tarea15 pts
  • Un sistema tridiagonal10 pts
  • Cuándo compensa lo disperso y cuándo no30 pts
0/ 7 respondidos
Ejercicios
1Respuesta numérica10 ptsSin responder

Una matriz CSR tiene indptr=[0,2,3,3,5]. ¿Cuánto vale nnz, el número de valores no nulos guardados?

n=n =n=aceptado: ± 0.01
2Respuesta numérica10 ptsSin responder

Con indptr=[0,2,3,3,5], ¿cuántos valores guardados tiene la fila 333 (la última, contando desde 000)? Es indptr[4]-indptr[3].

k=k =k=aceptado: ± 0.01
3Respuesta numérica10 ptsSin responder

Una matriz de valoración tridiagonal con n=1000n=1000n=1000 tiene 2 9982\,9982998 no nulos entre 1 000 0001\,000\,0001000000 de entradas. ¿Cuál es la densidad en porcentaje? Dé dos decimales.

d=d =d=aceptado: ± 0.01
4Respuesta numérica15 ptsSin responder

Para la matriz con filas (5;0;0;1)(5;0;0;1)(5;0;0;1), (0;0;2;0)(0;0;2;0)(0;0;2;0), (0;0;0;0)(0;0;0;0)(0;0;0;0) y (3;0;0;4)(3;0;0;4)(3;0;0;4), ¿cuánto vale la última componente de AxA\mathbf xAx para x=(1;1;1;1)\mathbf x=(1;1;1;1)x=(1;1;1;1)?

y=y =y=aceptado: ± 0.01
5Emparejar15 ptsSin responder

Empareje cada formato disperso con la tarea que mejor le conviene.

Elige la pareja de cada elemento de la izquierda.

coo_matrix
csr_matrix
csc_matrix
dia_matrix
6Elección10 ptsSin responder

Debe resolver en cada paso de tiempo de una malla de valoración un sistema tridiagonal con n=100 000n=100\,000n=100000 incógnitas. ¿Cuál es la elección sensata?

7Explicar con palabras30 ptsSin responder

En una o dos frases, explique por qué un formato disperso ahorra memoria y tiempo para una matriz mayormente nula, y por qué puede perder frente a una densa cuando la mayoría de las entradas son no nulas.

Modo matemáticasEntrada por teclado o LaTeXEjercicio 1 de 7 · Ctrl ⏎ para comprobar

Inicia sesión para ejecutar tu código.

Todas las clases se pueden leer gratis. Crea una cuenta o inicia sesión para ejecutar código, lanzar las pruebas y enviar este lab.

  • IDE en el navegador con terminal bash — sin instalar nada
  • Corrección instantánea, XP y tu lugar en la ruta
Crear una cuentaIniciar sesión
O
Continuar con GitHub