You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中哪种稀疏矩阵索引与赋值效率最高?现有矩阵组合能否提速?

Python稀疏矩阵的索引与赋值效率优化

核心结论

在scipy的稀疏矩阵类型中:

  • 针对单元素/小批量的随机索引、赋值,lil_matrix(链表存储)是效率较高的选择,支持灵活的行内元素修改。
  • 针对大规模批量构造或批量赋值,coo_matrix(坐标存储)是最优方案——它直接基于(行索引、列索引、值)三元组存储,构造时无额外动态修改开销,速度远快于其他类型。

针对你的代码的优化方案

你当前使用lil_matrix进行赋值的方式,在数据量较大时会有明显的性能损耗(因为LIL需要维护行链表的动态插入)。更高效的做法是直接通过三元组构造coo_matrix,示例代码如下:

import numpy as np
from scipy import sparse

# 创建示例数据
A = np.array([ [0, 2], [3, 0] ])
IdxP = np.array([9,100])
IdxN = np.array([50,30])
n, p = np.where(A)
sA = sparse.csr_matrix(A) 

# 收集构造COO所需的三元组
rows = IdxP[p]
cols = IdxN[n]
# 直接从原数组取数值更高效,无需通过sA索引
vals = A[p, n]

# 一次性构造COO矩阵
sB = sparse.coo_matrix((vals, (rows, cols)), shape=(200, 200))

# 如果后续需要支持快速行切片、矩阵乘法等操作,再转换为CSR矩阵(转换成本极低)
sB = sB.tocsr()

各稀疏矩阵类型的适用场景补充

  • CSR/CSC矩阵:适合矩阵乘法、行/列切片等运算,但赋值操作效率极低——因为它们采用压缩存储,修改时需要重新整理数据结构,完全不适合用来做构造阶段的赋值。
  • DOK矩阵:用字典存储非零元素,适合单个元素的随机赋值,但批量赋值效率不如COO,且内存开销更大。

总结建议

  1. 批量构造稀疏矩阵时,优先用coo_matrix直接通过三元组创建,这是速度最快的方式。
  2. 若后续需要进行运算或切片,再将COO转换为CSR/CSC即可(转换过程非常高效)。
  3. 仅当需要频繁进行单个元素的随机修改时,才考虑使用lil_matrix或dok_matrix。

内容的提问来源于stack exchange,提问作者f. c.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:37:06