10 行代码入门 sparse从 NumPy 数组创建多维稀疏数组的快速教程【免费下载链接】sparseSparse multi-dimensional arrays for the PyData ecosystem项目地址: https://gitcode.com/gh_mirrors/sp/sparsesparse是 PyData 生态中面向多维稀疏数组的 Python 库它把 SciPy 稀疏矩阵的 COO、CSR 等经典格式推广到任意维度并保持与 NumPy 数组几乎一致的使用体验。本快速教程面向新手仅用 10 行代码就能带你完成「从 NumPy 数组创建多维稀疏数组」的第一步并顺手理解稀疏数组的内存优势、常用运算与格式转换零基础也能轻松上手。为什么需要多维稀疏数组现实世界的数据常常「大部分是零」推荐系统的用户-物品评分、基因表达矩阵、图邻接矩阵、气象网格……如果这些数据用普通的稠密 NumPy 数组存储海量的 0 会白白占用内存。稀疏数组只记录非零元素的位置和取值存储与计算开销大幅下降。SciPy 自带的scipy.sparse只支持二维矩阵而 PyData 生态Dask、Xarray 等经常要处理三维乃至更高维的数据。sparse 库正是为此而生它提供任意维度的多维稀疏数组接口对齐numpy.ndarray而非numpy.matrix因此可以无缝接入 PyData 全家桶工作流。快速安装 sparse一条 pip 命令搞定安装非常简单在终端执行pip install sparsesparse 以 Numba 后端为默认实现也可通过SPARSE_BACKEND环境变量切换 Finch、MLIR 后端底层依赖 NumPy安装后直接import sparse即可使用。10 行代码从 NumPy 数组创建多维稀疏数组下面这段 10 行代码就是本教程的核心先创建一个三维 NumPy 数组把 90% 的元素置零再用sparse.COO一键转为多维稀疏数组import numpy as np # 第1行 import sparse # 第2行 x np.random.random((100, 100, 100)) # 第3行三维稠密数组 x[x 0.9] 0 # 第4行把90%元素置零 s sparse.COO(x) # 第5行转为稀疏数组 print(稀疏数组内存, s.nbytes) # 第6行 print(稠密数组内存, x.nbytes) # 第7行 y s 5 # 第8行直接做算术运算 print(y) # 第9行 print(y.todense().shape) # 第10行转回稠密数组从 NumPy 数组创建稀疏数组后能看到什么运行上面代码你会看到类似这样的输出稀疏数组内存 1102706 稠密数组内存 8000000 COO: shape(100, 100, 100), dtypefloat64, nnz100246, fill_value0.0 (100, 100, 100)这里有两个关键信息输出含义nnz100246非零元素non-zero个数只有总元素数的约 1/10nbytes对比稀疏版本仅占约 1.1 MB稠密版本需要 8 MB内存节省约 7 倍fill_value0.0填充值即「未存储的元素」统一视为 0 有趣的是s 5之后fill_value会变成 5.0因为「0 5 5」不再等于默认填充值稀疏库会自动处理这类变化无需你手动操心。更多从 NumPy 数组创建稀疏数组的姿势除了sparse.COO(x)COO类还提供了多种方便的构造方式实现见 sparse/numba_backend/_coo/core.pyCOO.from_numpy(x)与COO(x)等价语义更明确坐标 数据直接指定每个非零元素的位置适合自己组装数据coords [[0, 0, 0, 1, 1], [0, 1, 2, 0, 3], [0, 3, 2, 0, 1]] data [1, 2, 3, 4, 5] s4 sparse.COO(coords, data, shape(3, 4, 5))类 SciPy 写法(data, (rows, cols))二元组老用户无缝迁移字典 / 键值对{(0, 0, 0): 1, (1, 2, 3): 2}重复下标自动求和sparse.random(shape, density0.01, random_state42)生成随机多维稀疏数组见 sparse/numba_backend/_utils.pysparse.eye(M, formatcsc)单位稀疏数组配合随机数组做逆矩阵、图算法很方便多维稀疏数组的格式COO、CSR、CSC、GCXS、DOK 怎么选sparse 支持多种存储格式可通过sparse.asarray(a, format...)互相转换完整示例见 docs/examples/formats_example.py格式特点适用场景COO记录每个非零元素的坐标实现最简单通用、多维、构建数组CSR / CSC按行/列压缩索引压缩率高二维矩阵高效运算GCXS把 CSR/CSC 推广到 N 维高维数组的高压缩存储DOK字典存储适合频繁写入/修改逐步构建数组后再转其他格式COO 的存储思路可以用一张表直观说明——每一列就是一个非零元素的行、列、值dim1dim2dim3data0001000313022931421多维稀疏数组上的常见运算sparse.COO对象几乎支持所有 NumPy 操作且支持广播broadcastingnp.sin(s) s.T * 1 # 三角函数 转置 乘法 s.sum(axis0) # 归约求和 s s.T # 矩阵乘法 np.sqrt(s) # 通用函数 ufunc sparse.elemwise(...) # 自定义逐元素运算稀疏数组与 Dask 也能友好协作参考 docs/examples/dask_example.py从而在分布式环境下处理超大规模数据。与 SciPy 生态互操作 保存加载sparse 数组可直接与scipy.sparse的线性代数、图算法配合使用完整代码见 docs/examples/scipy_example.pyimport scipy.sparse as sps a_inv sps.linalg.spsolve(a, identity) # 稀疏线性方程组 sps.csgraph.bellman_ford(sparse.eye(5, k1) sparse.eye(5, k-1)) # 图最短路持久化存储同样简单由 sparse/numba_backend/_io.py 提供sparse.save_npz(s.npz, s) # 保存 s2 sparse.load_npz(s.npz) # 加载小结下一步去哪里学到这里你已经掌握了从 NumPy 数组创建多维稀疏数组的完整流程安装 → 构造 → 查看 → 运算 → 格式转换 → 与 SciPy 互操作 → 保存加载。一句话记住核心数据零多就用sparse.COO()内存立刻瘦身。想继续深入官方文档值得收藏docs/quickstart.md快速上手、docs/introduction.md设计动机与格式详解、docs/operations.md完整运算清单还有 docs/examples/scipy_example.py 和 docs/examples/formats_example.py 两个可直接运行的示例脚本。动手跑一遍多维稀疏数组从此不再是难题【免费下载链接】sparseSparse multi-dimensional arrays for the PyData ecosystem项目地址: https://gitcode.com/gh_mirrors/sp/sparse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考