σμ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 AcademyRoadmapsSkills
Ctrl K
AO
+1,2 Tsd. Lernende
AnmeldenBeitreten ↗
RoadmapsSkills
AO
+1,2 Tsd. Lernende
Anmelden
  • 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 AcademyRoadmapsSkills
Ctrl K
AO
+1,2 Tsd. Lernende
AnmeldenBeitreten ↗
RoadmapsSkills
AO
+1,2 Tsd. Lernende
Anmelden
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
SciPy-Skill›Modul 3 · Matrizen, Signale und Struktur›Thema 3.2·~45 Min.Mittelstufe

Dünnbesetzte Matrizen

Position in der SkillModul 3 von 3 · Thema 2 von 5
3.2 Dünnbesetzte Matrizen
—Lab-Punkte— / 100XP gesamt—Serie—

Nur speichern, was nicht null ist

Viele große Matrizen bestehen fast nur aus Nullen. Ein Gitter zur Optionsbewertung hat eine Zeile je Preisniveau, und jede Zeile berührt nur ihre zwei Nachbarn. Eine solche Matrix heißt dünnbesetzt. Jede Null zu speichern verschwendet Speicher und Zeit. scipy.sparse behält nur die Einträge ungleich null. Das Format csr_matrix (komprimierte dünnbesetzte Zeilen) nutzt drei Listen. data enthält die Nicht-Null-Werte zeilenweise, indices die Spalte jedes Werts, und indptr sagt, wo jede Zeile in data beginnt und endet: Zeile iii ist data[indptr[i]:indptr[i+1]]. Die letzte Zahl von indptr ist die Anzahl der Nicht-Nullen, nnz.

Verschiedene Formate passen zu verschiedenen Aufgaben. coo_matrix speichert einfache Tripel (Zeile, Spalte, Wert) und ist der einfache Weg, eine Matrix aufzubauen. csr_matrix ist schnell für Zeilenausschnitte und für das Produkt AxA\mathbf xAx, das etwa nnz Multiplikationen statt n2n^2n2 kostet. csc_matrix ist dieselbe Idee spaltenweise, und dia_matrix speichert Diagonalen, ideal für Bandmatrizen. Für ein System Ax=bA\mathbf x=\mathbf bAx=b nutzt sparse.linalg.spsolve die Nullen und ist viel schneller als ein dichtes Lösen. Dünnbesetzt ist nicht immer besser: Sind mehr als etwa ein Drittel der Einträge ungleich null, kostet die Buchführung mehr, als sie spart. In der Finanzwelt tritt Dünnbesetztheit in Bewertungsgittern auf, in Faktormodellen, in denen die meisten Ladungen null sind, und wenn man nur die starken Korrelationen behält.

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)
Eine CSR-Matrix lesenNehmen Sie die 4×44\times44×4-Matrix mit den Zeilen (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) und (3;0;0;4)(3;0;0;4)(3;0;0;4). In CSR ist data=[5,1,2,3,4], indices=[0,3,2,0,3] und indptr=[0,2,3,3,5]. Zeile 222 ist leer, weil indptr[2]=indptr[3]=3, und nnz=5. Die Multiplikation mit (1;1;1;1)(1;1;1;1)(1;1;1;1) addiert jede Zeile und ergibt (6;2;0;7)(6;2;0;7)(6;2;0;7) mit nur 555 Multiplikationen. Eine Tridiagonalmatrix mit n=1000n=1000n=1000, etwa ein Finite-Differenzen-Bewertungsgitter, hat 2 9982\,9982998 Nicht-Nullen bei 1 000 0001\,000\,0001000000 Einträgen, eine Dichte von 0,30%0{,}30\%0,30%. Sie braucht in CSR etwa 404040 KB gegenüber 888 MB dicht. Bei echten Daten bilden die Korrelationen von 555555 Aktien aus der gemeinsamen Kursdatei eine 55×5555\times5555×55-Matrix. Behält man nur Einträge mit ∣ρ∣>0,5|\rho|>0{,}5∣ρ∣>0,5, bleiben 249249249 von 3 0253\,0253025 übrig, 8,2%8{,}2\%8,2%, und die CSR-Kopie braucht 3,23{,}23,2 KB gegenüber 24,224{,}224,2 KB dicht. Bei ∣ρ∣>0,6|\rho|>0{,}6∣ρ∣>0,6 bleiben nur 4,3%4{,}3\%4,3%.
  • Drei Listen: data, indices und indptr beschreiben eine CSR-Matrix, und indptr[-1] ist die Zahl der Nicht-Nullen.
  • In COO bauen, in CSR rechnen: Tripel sind leicht zusammenzusetzen, zeilenweises Speichern ist schnell für Produkte und Lösungen.
  • Dünnbesetzt lohnt sich nur bei überwiegend Nullen: Eine dichte Matrix ist besser, wenn viele Einträge ungleich null sind.

Lab: Was bewertet wird

  • Nicht-Nullen zählen10 Pkt.
  • Wie viele Werte in einer Zeile10 Pkt.
  • Die Dichte eines Gitters10 Pkt.
  • Ein dünnbesetztes Produkt15 Pkt.
  • Welches Format für welche Aufgabe15 Pkt.
  • Ein tridiagonales System10 Pkt.
  • Wann dünnbesetzt sich lohnt und wann nicht30 Pkt.
0/ 7 beantwortet
Aufgaben
1Numerische Antwort10 Pkt.Nicht beantwortet

Eine CSR-Matrix hat indptr=[0,2,3,3,5]. Wie groß ist nnz, die Zahl der gespeicherten Nicht-Null-Werte?

n=n =n=akzeptiert: ± 0.01
2Numerische Antwort10 Pkt.Nicht beantwortet

Mit indptr=[0,2,3,3,5]: Wie viele gespeicherte Werte hat Zeile 333 (die letzte, ab 000 gezählt)? Es ist indptr[4]-indptr[3].

k=k =k=akzeptiert: ± 0.01
3Numerische Antwort10 Pkt.Nicht beantwortet

Eine tridiagonale Bewertungsmatrix mit n=1000n=1000n=1000 hat 2 9982\,9982998 Nicht-Nullen unter 1 000 0001\,000\,0001000000 Einträgen. Wie groß ist die Dichte in Prozent? Zwei Dezimalstellen.

d=d =d=akzeptiert: ± 0.01
4Numerische Antwort15 Pkt.Nicht beantwortet

Für die Matrix mit den Zeilen (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) und (3;0;0;4)(3;0;0;4)(3;0;0;4): Wie groß ist der letzte Eintrag von AxA\mathbf xAx für x=(1;1;1;1)\mathbf x=(1;1;1;1)x=(1;1;1;1)?

y=y =y=akzeptiert: ± 0.01
5Zuordnen15 Pkt.Nicht beantwortet

Ordnen Sie jedem dünnbesetzten Format die Aufgabe zu, die am besten passt.

Wähle den Partner für jedes Element links.

coo_matrix
csr_matrix
csc_matrix
dia_matrix
6Auswahl10 Pkt.Nicht beantwortet

Sie müssen bei jedem Zeitschritt eines Bewertungsgitters ein tridiagonales System mit n=100 000n=100\,000n=100000 Unbekannten lösen. Was ist die sinnvolle Wahl?

7In Worten erklären30 Pkt.Nicht beantwortet

Erklären Sie in ein bis zwei Sätzen, warum ein dünnbesetztes Format bei einer überwiegend nullen Matrix Speicher und Zeit spart und warum es gegen eine dichte Matrix verlieren kann, wenn die meisten Einträge ungleich null sind.

Mathe-ModusEingabe per Tastatur oder LaTeXAufgabe 1 von 7 · Strg ⏎ zum Prüfen

Melde dich an, um deinen Code auszuführen.

Alle Lektionen kannst du kostenlos lesen. Erstelle ein Konto oder melde dich an, um Code auszuführen, Tests zu starten und dieses Lab abzugeben.

  • IDE im Browser mit Bash-Terminal — nichts zu installieren
  • Sofortige Bewertung, XP und dein Platz auf der Skill
Konto erstellenAnmelden
ODER
Weiter mit GitHub