σμ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 AcademyRoadmapsRoteiros
Ctrl K
AO
+1,2 mil alunos
EntrarParticipar ↗
RoadmapsRoteiros
AO
+1,2 mil alunos
Entrar
  • 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 AcademyRoadmapsRoteiros
Ctrl K
AO
+1,2 mil alunos
EntrarParticipar ↗
RoadmapsRoteiros
AO
+1,2 mil alunos
Entrar
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Roteiro de SciPy›Módulo 3 · Matrizes, sinais e estrutura›Tópico 3.2·~45 minIntermediário

Matrizes esparsas

Posição no roteiroMódulo 3 de 3 · Tópico 2 de 5
3.2 Matrizes esparsas
—Nota do lab— / 100XP total—Sequência—

Guardar só o que não é zero

Muitas matrizes grandes são quase só zeros. Uma malha para precificar uma opção tem uma linha por nível de preço, e cada linha toca só suas duas vizinhas. Uma matriz assim é chamada esparsa. Guardar cada zero desperdiça memória e tempo. O scipy.sparse guarda só as entradas não nulas. O formato csr_matrix (linha esparsa comprimida) usa três listas. data guarda os valores não nulos linha a linha, indices a coluna de cada valor, e indptr diz onde cada linha começa e termina em data: a linha iii é data[indptr[i]:indptr[i+1]]. O último número de indptr é a contagem de não nulos, nnz.

Formatos diferentes servem a tarefas diferentes. coo_matrix guarda simples trincas (linha, coluna, valor) e é o jeito fácil de construir uma matriz. csr_matrix é rápido para fatias de linhas e para o produto AxA\mathbf xAx, que custa cerca de nnz multiplicações em vez de n2n^2n2. csc_matrix é a mesma ideia por colunas, e dia_matrix guarda diagonais, ideal para matrizes em banda. Para um sistema Ax=bA\mathbf x=\mathbf bAx=b, sparse.linalg.spsolve usa os zeros para ser muito mais rápido que uma resolução densa. Esparso nem sempre é melhor: se mais de um terço das entradas é não nulo, a contabilidade custa mais do que poupa. Em finanças, a esparsidade aparece em malhas de precificação, em modelos de fatores em que a maioria das exposições é zero e quando só se mantêm as correlações fortes.

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)
Ler uma matriz CSRTome a matriz 4×44\times44×4 com linhas (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) e (3;0;0;4)(3;0;0;4)(3;0;0;4). Em CSR, data=[5,1,2,3,4], indices=[0,3,2,0,3] e indptr=[0,2,3,3,5]. A linha 222 está vazia porque indptr[2]=indptr[3]=3, e nnz=5. Multiplicar por (1;1;1;1)(1;1;1;1)(1;1;1;1) soma cada linha e dá (6;2;0;7)(6;2;0;7)(6;2;0;7) com apenas 555 multiplicações. Uma matriz tridiagonal com n=1000n=1000n=1000, como uma malha de precificação em diferenças finitas, tem 2 9982\,9982998 não nulos em 1 000 0001\,000\,0001000000 de entradas, densidade de 0,30%0{,}30\%0,30%. Precisa de cerca de 404040 KB em CSR contra 888 MB densa. Em dados reais, as correlações de 555555 ações do arquivo de preços compartilhado formam uma matriz 55×5555\times5555×55. Manter só as entradas com ∣ρ∣>0,5|\rho|>0{,}5∣ρ∣>0,5 deixa 249249249 de 3 0253\,0253025, 8,2%8{,}2\%8,2%, e a cópia CSR ocupa 3,23{,}23,2 KB contra 24,224{,}224,2 KB densa. Com ∣ρ∣>0,6|\rho|>0{,}6∣ρ∣>0,6 restam só 4,3%4{,}3\%4,3%.
  • Três listas: data, indices e indptr descrevem uma matriz CSR, e indptr[-1] é o número de não nulos.
  • Construa em COO, calcule em CSR: trincas são fáceis de montar, o armazenamento por linhas é rápido para produtos e resoluções.
  • Esparso só compensa se for em sua maioria zeros: uma matriz densa é melhor quando muitas entradas são não nulas.

Lab: o que é avaliado

  • Contar os não nulos10 pts
  • Quantos valores há numa linha10 pts
  • A densidade de uma malha10 pts
  • Um produto esparso15 pts
  • Qual formato para qual tarefa15 pts
  • Um sistema tridiagonal10 pts
  • Quando o esparso compensa e quando não30 pts
0/ 7 respondidas
Tarefas
1Resposta numérica10 ptsSem resposta

Uma matriz CSR tem indptr=[0,2,3,3,5]. Quanto vale nnz, o número de valores não nulos guardados?

n=n =n=aceito: ± 0.01
2Resposta numérica10 ptsSem resposta

Com indptr=[0,2,3,3,5], quantos valores guardados tem a linha 333 (a última, contando de 000)? É indptr[4]-indptr[3].

k=k =k=aceito: ± 0.01
3Resposta numérica10 ptsSem resposta

Uma matriz de precificação tridiagonal com n=1000n=1000n=1000 tem 2 9982\,9982998 não nulos entre 1 000 0001\,000\,0001000000 de entradas. Qual é a densidade em percentual? Dê duas casas decimais.

d=d =d=aceito: ± 0.01
4Resposta numérica15 ptsSem resposta

Para a matriz com linhas (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) e (3;0;0;4)(3;0;0;4)(3;0;0;4), quanto vale a ú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=aceito: ± 0.01
5Associar15 ptsSem resposta

Associe cada formato esparso à tarefa que melhor lhe convém.

Escolha o par de cada item da esquerda.

coo_matrix
csr_matrix
csc_matrix
dia_matrix
6Escolha10 ptsSem resposta

Você deve resolver, a cada passo de tempo de uma malha de precificação, um sistema tridiagonal com n=100 000n=100\,000n=100000 incógnitas. Qual é a escolha sensata?

7Explicar com palavras30 ptsSem resposta

Em uma ou duas frases, explique por que um formato esparso economiza memória e tempo para uma matriz quase toda nula, e por que pode perder para uma densa quando a maioria das entradas é não nula.

Modo matemáticaEntrada por teclado ou LaTeXTarefa 1 de 7 · Ctrl ⏎ para verificar

Entre para executar o seu código.

Todas as aulas são gratuitas para ler. Crie uma conta ou entre para executar código, rodar os testes e enviar este lab.

  • IDE no navegador com terminal bash — nada para instalar
  • Correção instantânea, XP e o seu lugar no roteiro
Criar uma contaEntrar
OU
Continuar com o GitHub