像 NumPy 一样运算:sparse 稀疏数组算术运算与 ufunc 完整指南
像 NumPy 一样运算sparse 稀疏数组算术运算与 ufunc 完整指南【免费下载链接】sparseSparse multi-dimensional arrays for the PyData ecosystem项目地址: https://gitcode.com/gh_mirrors/sp/sparse在数据科学与科学计算领域当数据规模巨大而有效信息却只占极少比例时sparse 稀疏数组就是 PyData 生态中最趁手的工具之一。这个开源项目为 Python 提供了真正的多维稀疏数组而不仅是 SciPy 那样的二维矩阵并做到了与 NumPy 接口的高度一致加法、减法、乘法、除法等算术运算可以直接书写np.add、np.sin、np.sqrt等 ufunc 通用函数也能一键套用。本文面向新手用最少的代码带你掌握 sparse 稀疏数组算术运算、逐元素运算ufunc与广播归约的完整用法。为什么需要 sparse 稀疏数组普通的 NumPy 数组把每一个元素都实实在在存下来哪怕 99% 都是 0。当数据是推荐系统的评分矩阵、知识图谱的邻接矩阵或张量分解中的高维张量时这种方式既浪费内存又拖慢计算。sparse 稀疏数组只存储非零元素及其坐标同时尽可能复刻 NumPy 的写法让你在低内存开销下获得像 NumPy 一样的运算体验。项目核心的格式包括COO、GCXS、DOK等全部运算逻辑的实现可参考源码目录 sparse/numba_backend/官方运算说明见 docs/operations.md。快速上手30 秒创建稀疏数组安装后只需几行代码就能把 NumPy 数组转成稀疏数组或用随机方式生成一个import numpy as np import sparse # 从稠密数组转换 x sparse.COO.from_numpy(np.eye(4)) # 或直接用 asarray 转换 y sparse.asarray(np.arange(12).reshape(3, 4))COO是最常用的格式全称 Coordinate format用坐标列表记录非零元素直观且易于运算。想了解 COO 的底层实现可以看看 sparse/numba_backend/_coo/core.py。支持哪些算术运算符一表看懂sparse 稀疏数组支持几乎所有 Python 标准算术运算符与 NumPy 惯例包括运算符含义示例/-加 / 减x y、x - y*//乘 / 除x * y、x / 7.3///%整除 / 取余x // 2、x % 3**幂x ** 2矩阵乘法x y/!相等比较x 5、x ! 0/大小比较x y、x y例如sparse.elemwise(np.add, x, y)与x y等价几乎所有算术运算最终都经由通用的elemwise逐元素机制完成核心实现在 sparse/numba_backend/_umath.py。与标量混合运算的填充值魔法sparse 稀疏数组支持与标量直接运算这是最常用的场景之一x 1 # 每个非零元素 1 5 * x # 每个元素 ×5 x / 7.3 # 除以标量 x 0 # 判断哪些位置为 0这里藏着一个重要的概念fill_value填充值。稀疏数组默认填充值为 0运算时它表示所有未存储位置的取值。当运算会把 0 映射成非零值时例如x 1结果数组的填充值会自动变为 1同理~x的填充值会变成True。这套机制保证了结果依旧是稀疏的不必展开成稠密数组。相关定义见 sparse/numba_backend/_sparse_array.py。ufunc 逐元素运算像 NumPy 一样调用数学函数这是 sparse 最惊艳的特性它实现了 NumPy 的__array_ufunc__协议见 sparse/numba_backend/_sparse_array.py因此绝大多数 ufunc 都能直接作用于稀疏数组np.abs(x) # 绝对值 np.sin(x) # 正弦 np.sqrt(x) # 平方根 np.exp(x) # 指数 np.log(x) # 对数 np.conj(x) # 共轭与标量运算同理np.exp(x)、np.cos(x)、np.log(x)这类把 0 映射为非零值的函数会产生带非零填充值的新稀疏数组而np.abs(x)、np.sqrt(x)等保持 0→0 的函数则维持原填充值。只要结果不稠密几乎所有一元、二元 ufunc 都能直接使用。用 sparse.elemwise 组合任意自定义函数如果内置运算符不够用sparse.elemwise允许你把任意支持广播的函数应用到任意多个参数上参数可以是稀疏数组或 SciPy 稀疏矩阵sparse.elemwise(np.add, x, y) # 等价于 x y sparse.elemwise(np.maximum, x, 0) # 截断负数 sparse.elemwise(lambda a, b: a * b 1, x, y)逐元素运算性能的基准测试可以运行官方示例 examples/elemwise_example.py它同时对比了 Numba 后端与 Finch 后端在multiply、add、greater_equal三种运算上的表现。广播机制不同形状也能直接算与 NumPy 完全一致sparse 稀疏数组的二元运算支持广播Broadcasting。只要两个数组满足维度对齐规则维度缺失或某维度为 1就能直接运算a sparse.random((4, 1), density0.5) # 形状 (4, 1) b sparse.random((5, 4), density0.5) # 形状 (5, 4) c a b # 结果形状 (5, 4)形状(4,)与(5, 1)运算得到(5, 4)但(4, 1)与(5, 1)这类无法对齐的会抛出ValueError与 NumPy 行为一致。归约运算sum、max、min、prod 一网打尽对整张稀疏数组或沿指定轴做归约是统计分析的刚需。sparse 原生支持x.sum() # 全部求和 x.sum(axis1) # 沿第 1 轴求和 np.max(x) # 最大值 np.min(x, axis(0, 2)) x.prod() # 连乘更通用的是reduce方法它可以接收任意二元 ufunc 作为归约函数x.reduce(np.add, axis1) # 自定义归约求和 x.reduce(np.maximum) # 归约取最大归约逻辑的完整实现见 sparse/numba_backend/_sparse_array.py。需要注意的是若归约会把填充值变成非零值导致结果稠密sparse 会主动抛出ValueError提醒你。与 SciPy 稀疏矩阵的协同运算sparse 还支持与scipy.sparse的稀疏矩阵直接运算例如x y、x - y、x * y、x y都允许y是 SciPy 稀疏矩阵。不过官方建议为了保证结果正确最好先把 SciPy 矩阵显式转换为sparse.COO或sparse.GCXS再参与运算。新手避坑3 个常见注意事项避免意外稠密化当运算会得到稠密结果时例如与普通 NumPy 数组直接相加sparse 会抛出ValueError而不是偷偷展开。确需稠密结果时请显式调用x.todense()。有些运算要求零填充值例如nonzero等操作要求填充值为 0concatenate要求所有输入填充值一致使用前建议查阅 API 文档。注意 ufunc 的 reduce 精度库按坐标分组做归约若归约结果会因反复叠加多个 0 而改变结果可能不精确大多数场景下没有影响。结语让稀疏计算变得简单sparse 稀疏数组库把 NumPy 的算术运算、ufunc 通用函数、广播与归约体验完整带入了稀疏世界。对于推荐系统、图计算、张量分解等典型稀疏场景你几乎不需要改变原有 NumPy 的书写习惯只需把数据类型换成COO或GCXS就能获得显著的内存与性能收益。如果你想亲自上手克隆仓库后运行examples/elemwise_example.py即可看到稀疏与稠密运算的直观对比官方文档 docs/operations.md 也列出了所有支持与暂不支持的运算清单值得收藏。【免费下载链接】sparseSparse multi-dimensional arrays for the PyData ecosystem项目地址: https://gitcode.com/gh_mirrors/sp/sparse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

SIEMENS 3RT1075-6AM36 磁性接触器

SIEMENS 3RT1075-6AM36 磁性接触器

SIEMENS 3RT1075-6AM36 磁性接触器产品简介:产品特点:西门子SIRIUS系列3RT1接触器,品质可靠。额定工作电流95A(AC-3),适用于大功率电机控制。线圈控制电压220-240V AC(50/60Hz)&…

2026/8/19 20:36:38 阅读更多 →
Effective MLOps 模型开发实战:从 EDA 到生产级训练脚本的完整流程

Effective MLOps 模型开发实战:从 EDA 到生产级训练脚本的完整流程

Effective MLOps 模型开发实战:从 EDA 到生产级训练脚本的完整流程 【免费下载链接】edu Educational materials on deep learning by Weights & Biases 项目地址: https://gitcode.com/gh_mirrors/edu2/edu 想要让机器学习模型真正落地生产环境&#xf…

2026/8/19 20:36:38 阅读更多 →
多设备同步实战:手把手搭建budgetzero+CouchDB同步服务器

多设备同步实战:手把手搭建budgetzero+CouchDB同步服务器

多设备同步实战:手把手搭建budgetzeroCouchDB同步服务器 【免费下载链接】budgetzero Open-source, self-hosted, zero-based budgeting. 项目地址: https://gitcode.com/gh_mirrors/bu/budgetzero budgetzero 是一款免费、开源、注重隐私的零基预算工具&…

2026/8/19 20:36:38 阅读更多 →

最新新闻

从L2到L5:拆解自动驾驶的技术鸿沟与用户安全指南

从L2到L5:拆解自动驾驶的技术鸿沟与用户安全指南

1. 从“全自动驾驶”到“辅助驾驶”:一场关于期望管理的现实课最近,关于特斯拉自动驾驶能力的讨论又热了起来。起因是网络上流传的一些信息,让不少车主和潜在消费者对“两年内达到Level 5级自动驾驶”这个目标产生了新的期待,甚至…

2026/8/19 22:02:26 阅读更多 →
XMC平台CoreMark移植实战:从基准测试到复杂组件移植

XMC平台CoreMark移植实战:从基准测试到复杂组件移植

1. 项目缘起:为什么要在XMC上移植CoreMark? 最近在折腾英飞凌的XMC系列MCU,手头正好有个项目需要对不同型号的XMC进行性能摸底。光看数据手册上的主频和DMIPS/MHz数据总觉得有点虚,毕竟实际运行效率还跟编译器优化、内存访问速度、…

2026/8/19 22:02:26 阅读更多 →
第141篇 ROS2日志系统——rcl_logging配置和日志分析

第141篇 ROS2日志系统——rcl_logging配置和日志分析

面试翻车现场 面试一家做服务机器人的公司,面试官问:"你们系统的日志是怎么管理的?出了问题怎么排查?" 我说用RCLCPP_INFO打印,然后看终端输出。他笑了笑:"只做开发确实够用。但你有没有想…

2026/8/19 22:02:26 阅读更多 →
第139篇 ROS2调试技巧——常见错误的排查思路和工具

第139篇 ROS2调试技巧——常见错误的排查思路和工具

面试翻车现场 面试时面试官问:"你在ROS2项目中遇到过最难排查的bug是什么?怎么解决的?" 我讲了个话题通信不通的问题,最后发现是QoS不匹配。面试官追问:"除了QoS,你还用过哪些调试工具&am…

2026/8/19 22:02:26 阅读更多 →
第146篇 激光雷达测距原理——ToF/三角测距/相位法的区别

第146篇 激光雷达测距原理——ToF/三角测距/相位法的区别

ROS2的40篇终于完结了。从这一篇开始,我们进入传感器与数据处理的阶段。为什么先聊激光雷达?因为它是机器人感知系统的核心传感器。不管是做SLAM、导航还是避障,激光雷达几乎是标配。面试中考激光雷达的概率,仅次于考ROS2本身。之…

2026/8/19 22:02:26 阅读更多 →
2025年主流测试用例集工具深度横评与选型指南

2025年主流测试用例集工具深度横评与选型指南

1. 测试用例集工具:从“记录本”到“效率引擎”的演进 如果你和我一样,在软件测试这行摸爬滚打了几年,一定经历过从Excel、Word文档管理测试用例的“石器时代”。那时候,一个功能迭代,测试用例文档动辄几十页&#xff…

2026/8/19 22:01:26 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/19 11:55:18 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/19 9:46:27 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/19 11:55:16 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/19 5:04:55 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/19 7:42:22 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/19 11:55:13 阅读更多 →