σμ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 Academyロードマップスキル
Ctrl K
AO
+1.2k 人の学習者
ログイン参加する ↗
ロードマップスキル
AO
+1.2k 人の学習者
ログイン
  • 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 Academyロードマップスキル
Ctrl K
AO
+1.2k 人の学習者
ログイン参加する ↗
ロードマップスキル
AO
+1.2k 人の学習者
ログイン
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
SciPy スキル›モジュール 3 · 行列・信号・構造›トピック 3.2·~45 分中級

疎行列

スキル上の位置モジュール 3/3 · トピック 2/5
3.2 疎行列
—ラボスコア— / 100合計XP—連続日数—

ゼロでないものだけを保存する

大きな行列の多くは、ほとんどがゼロです。オプション価格付け用の格子は価格水準ごとに1行あり、各行は両隣としか関係しません。このような行列を疎行列と呼びます。ゼロをすべて保存するのはメモリと時間の無駄です。scipy.sparse はゼロでない要素だけを保存します。csr_matrix(圧縮疎行)形式は3つのリストを使います。data はゼロでない値を行ごとに並べ、indices は各値の列番号、indptr は各行が data の中でどこから始まりどこで終わるかを示します。行 iii は data[indptr[i]:indptr[i+1]] です。indptr の最後の数がゼロでない要素の数 nnz です。

形式ごとに向く仕事が違います。coo_matrix は(行, 列, 値)の三つ組をそのまま保存し、行列を作るのに簡単です。csr_matrix は行の切り出しと積 AxA\mathbf xAx が速く、積は n2n^2n2 ではなく約 nnz 回の乗算で済みます。csc_matrix は列について同じ考え方で、dia_matrix は対角線を保存し帯行列に最適です。連立方程式 Ax=bA\mathbf x=\mathbf bAx=b では、sparse.linalg.spsolve がゼロを利用して密な解法よりずっと速く解きます。疎が常に良いわけではなく、要素の約3分の1以上がゼロでないなら、管理の手間が節約を上回ります。金融では、価格付けの格子、ほとんどの負荷がゼロの因子モデル、強い相関だけを残す場合に疎性が現れます。

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)
CSR行列を読む行が (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)、(3,0,0,4)(3,0,0,4)(3,0,0,4) の 4×44\times44×4 行列を考えます。CSRでは data=[5,1,2,3,4]、indices=[0,3,2,0,3]、indptr=[0,2,3,3,5] です。indptr[2]=indptr[3]=3 なので行 222 は空で、nnz=5 です。(1,1,1,1)(1,1,1,1)(1,1,1,1) を掛けると各行の和 (6,2,0,7)(6,2,0,7)(6,2,0,7) が、わずか 555 回の乗算で得られます。差分法の価格付け格子のような n=1000n=1000n=1000 の三重対角行列は、1,000,0001{,}000{,}0001,000,000 個の要素のうちゼロでないものが 2,9982{,}9982,998 個で、密度は 0.30%0.30\%0.30% です。CSRなら約 404040 KB、密なら 888 MBです。実データでは、共有の価格ファイルの 555555 銘柄の相関が 55×5555\times5555×55 の行列をなします。∣ρ∣>0.5|\rho|>0.5∣ρ∣>0.5 の要素だけ残すと 3,0253{,}0253,025 個のうち 249249249 個(8.2%8.2\%8.2%)が残り、CSRは 3.23.23.2 KB(密は 24.224.224.2 KB)です。∣ρ∣>0.6|\rho|>0.6∣ρ∣>0.6 では 4.3%4.3\%4.3% だけが残ります。
  • 3つのリスト:data、indices、indptr がCSR行列を表し、indptr[-1] がゼロでない要素の数。
  • COOで作り、CSRで計算する:三つ組は組み立てやすく、行ベースの保存は積や求解に速い。
  • 疎が得になるのはほとんどがゼロのとき:ゼロでない要素が多いなら密な行列の方が良い。

ラボ:採点される内容

  • ゼロでない要素の数10点
  • 行の値の数10点
  • 格子の密度10点
  • 疎行列の積15点
  • どの形式がどの仕事に向くか15点
  • 三重対角系10点
  • 疎が得になる場合とならない場合30点
0/ 7問回答済み
問題
1数値で答える10点未回答

CSR行列の indptr=[0,2,3,3,5] です。保存されているゼロでない値の数 nnz はいくつですか。

n=n =n=許容:± 0.01
2数値で答える10点未回答

indptr=[0,2,3,3,5] のとき、行 333(000 から数えて最後の行)には値がいくつ保存されていますか。indptr[4]-indptr[3] です。

k=k =k=許容:± 0.01
3数値で答える10点未回答

n=1000n=1000n=1000 の三重対角の価格付け行列には、1,000,0001{,}000{,}0001,000,000 個の要素のうちゼロでないものが 2,9982{,}9982,998 個あります。密度は何%ですか。小数第2位まで答えてください。

d=d =d=許容:± 0.01
4数値で答える15点未回答

行が (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)、(3,0,0,4)(3,0,0,4)(3,0,0,4) の行列 AAA と x=(1,1,1,1)\mathbf x=(1,1,1,1)x=(1,1,1,1) について、AxA\mathbf xAx の最後の成分はいくつですか。

y=y =y=許容:± 0.01
5対応づけ15点未回答

各疎行列形式を、最も合う仕事に結び付けてください。

左の各項目に対応するものを選んでください。

coo_matrix
csr_matrix
csc_matrix
dia_matrix
6選択10点未回答

価格付け格子の各時間ステップで、n=100,000n=100{,}000n=100,000 個の未知数の三重対角系を解く必要があります。妥当な選択はどれですか。

7言葉で説明する30点未回答

ほとんどがゼロの行列で疎形式がメモリと時間を節約する理由と、ほとんどがゼロでないときに密な行列に負けうる理由を1〜2文で説明してください。

数学モードキーボードまたは LaTeX で入力問題1/7 · Ctrl ⏎ で確認

コードを実行するにはログインしてください。

レクチャーはすべて無料で読めます。コードの実行、テスト、ラボの提出にはアカウントの作成かログインが必要です。

  • ブラウザ内IDEとbashターミナル。インストール不要
  • 即時採点、XP、スキルでの現在地
アカウントを作成ログイン
または
GitHubで続ける