σμ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—连续天数—

只存储非零的部分

许多大矩阵几乎全是零。期权定价的网格每个价格水平一行,每一行只与两个相邻行有关。这样的矩阵叫稀疏矩阵。把每个零都存下来既浪费内存又浪费时间。scipy.sparse 只保存非零元素。csr_matrix(压缩稀疏行)格式用三个列表:data 按行存放非零值,indices 存每个值的列号,indptr 说明每一行在 data 中的起止位置:第 iii 行是 data[indptr[i]:indptr[i+1]]。indptr 的最后一个数就是非零个数 nnz。

不同格式适合不同任务。coo_matrix 直接存(行, 列, 值)三元组,是最容易构造矩阵的方式。csr_matrix 对行切片和乘积 AxA\mathbf xAx 很快,乘积大约只需 nnz 次乘法而不是 n2n^2n2 次。csc_matrix 是按列的同样思路,dia_matrix 存对角线,最适合带状矩阵。对方程组 Ax=bA\mathbf x=\mathbf bAx=b,sparse.linalg.spsolve 利用零元素,比稠密求解快得多。稀疏并不总是更好:若非零元素超过约三分之一,管理开销就超过了节省。在金融中,稀疏性出现在定价网格、大多数载荷为零的因子模型,以及只保留强相关的场合。

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 矩阵取 4×44\times44×4 矩阵,各行为 (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)。CSR 下 data=[5,1,2,3,4],indices=[0,3,2,0,3],indptr=[0,2,3,3,5]。第 222 行为空,因为 indptr[2]=indptr[3]=3,且 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%。
  • 三个列表: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 个非零。密度是多少(百分数)?保留两位小数。

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 分未作答

请用一两句话解释:为什么稀疏格式能为大部分为零的矩阵节省内存和时间,以及为什么当多数元素非零时它可能不如稠密矩阵。

数学模式键盘或 LaTeX 输入第 1/7 题 · Ctrl ⏎ 检查

登录后即可运行你的代码。

所有讲解均可免费阅读。创建账户或登录后,即可运行代码、运行测试并提交此实验。

  • 浏览器内 IDE 与 bash 终端,无需安装
  • 即时评分、XP 以及你在学习路线中的位置
创建账户登录
或
使用 GitHub 继续