我的 NumPy 之年:为下一代科学计算创建 DType

主要观点:

  • 作者从无 CPython C API 经验到在 NumPy 2.0 中发布新的 DType,分享了在 NumPy 中引入新字符串 DType 的幕后工作,包括技术过程、设计决策及遇到的困难等。
  • 介绍了 NumPy 中字符串的历史,包括 Python 2 和 Python 3 中字符串数组的情况,指出 Python 3 默认的 Unicode 字符串数组存在内存浪费和操作效率低的问题。
  • 阐述了对象数组作为字符串数组默认类型带来的生态系统范围的技术债务,如对 pandas 和 Astropy 的影响。
  • 讲述自己从天体物理学博士到参与 NumPy 项目的经历,包括在不同机构的工作和技能积累,以及如何因 NASA 资助机会而参与到 NumPy 字符串 DType 的实现中。
  • 分享了在大型项目中如何开始、获取帮助,如利用公共频道、寻找相关 bug 修复、参加面对面 Zoom 会议等,还介绍了实现可变宽度字符串 DType 的过程和遇到的问题及解决方法。
  • 强调了调试的重要性,通过使用调试器解决问题。同时提到加入 NumPy 社区的方式,如审查代码、处理问题等,以及成为维护者的过程。
  • 介绍了 NumPy 2.0 中的新字符串 DType np.dtype.StringDType,包括支持 UTF-8 编码的可变宽度字符串、处理缺失数据、短字符串优化和竞技场分配器等功能。

关键信息:

  • Python 2 字符串为字节字符串,Python 3 为 Unicode 字符串,NumPy 数组在不同版本中有不同表现。
  • 对象数组作为字符串数组默认类型导致生态系统技术债务,如影响 pandas 和 Astropy。
  • 作者通过 NASA 资助机会参与 NumPy 字符串 DType 实现,逐步学习和构建新的 DType。
  • 介绍在大型项目中获取帮助的方法,如利用公共频道、参加会议等。
  • 详细阐述 NumPy 2.0 新字符串 DType 的各种功能,如支持缺失数据、短字符串优化和竞技场分配器。

重要细节:

  • Python 2 字符串数组每个元素的字节数与元素长度相同,若未填满数组会添加空字节。
  • Python 3 默认的 Unicode 字符串数组占用四倍内存,操作效率低。
  • 对 pandas 来说,对象数组导致性能问题,有相关提案试图替换。
  • Astropy 因 NumPy 的 Unicode 字符串默认问题进行了大量工作。
  • NumPy 2.0 的新字符串 DType 支持 UTF-8 编码、处理缺失数据等。
  • 实现可变宽度字符串 DType 时遇到 NumPy 没有“边车存储”概念的问题,通过使用指针数组解决。
  • 调试时使用 GDB 和 LLDB 调试器很重要。
  • 成为 NumPy 社区维护者可通过审查代码、处理问题等方式,需不断努力。
阅读 10
0 条评论