NumPy 2.0.0发布
NumPy 2.0.0是自 2006 年以来第一个主要版本:
- https://github.com/numpy/numpy/releases/tag/v2.0.0
- https://numpy.org/devdocs/release/2.0.0-notes.html
- https://numpy.org/devdocs/numpy_2_0_migration_guide.html
亮点
- np.quantile 现在支持 "权重 "参数
- np.unique_counts / np.unique_values,其中一个相当于 pandas.Series.value_counts(),这将是非常棒的,避免了经常为使用 value_counts 而转换为 Series。
- 奇怪的是,新增了 np.device 和 np.to_device,但只支持 device='cpu'。也许 numpy 打算成为 Pytorch 的替代品?
- 添加了 StringDtype。如果你有一个字符串数组,它的 dtype 通常是 "U58",表示它是一个最多 58 个字符的 varchar。现在有了 StringDType,在 np 数组中添加长度可变的字符串似乎变得更容易了。
- 有了更好的实现,sort 和 argsort 将变得更快。
1、新功能
- 新的可变长度字符串 dtype(StringDType)和新的 numpy.strings 命名空间,其中包含用于字符串操作的高性能 ufuncs、
- 在所有 numpy.fft 函数中支持 float32 和 longdouble、
- 在主 numpy 命名空间中支持数组 API 标准。
2、性能改进:
通过使用英特尔 x86-simd-sort 和 Google Highway 库,排序功能(sort、argsort、partition、argpartition)得到了加速,可能会有较大的(特定于硬件的)提速、
macOS 加速支持和 macOS >=14 的二进制轮子,显著提高了 macOS 上线性代数操作的性能,轮子也缩小了约 3 倍、
通过实施除了支持定长字符串 dtypes 之外还支持 StringDType 的 ufuncs,numpy.char 定长字符串操作已得到加速、
新的跟踪和自省 API opt_func_info,用于确定哪些硬件特定的内核可用并将被调度。
numpy.save 现在使用第 4 版 pickle 协议来保存具有对象 dtype 的数组,这允许 pickle 对象大于 4GB,并将大型数组的保存速度提高了约 5%。
3、Python API 改进:
通过新的模块结构将公共 API 和私有 API 明确分开,现在每个公共函数都可以在一个地方使用、
删除了许多非推荐函数和别名。这将使学习和使用 NumPy 变得更加容易。主命名空间中的对象数量减少了 ~10%,numpy.lib 中的对象数量减少了 ~80%、
规范 dtype 名称和新的 isdtype 自省函数、
4、改进 C API:
- 新增用于创建自定义 dtypes 的公共 C API、
- 删除了许多过时的函数和宏,并隐藏了私有内部结构,以方便未来的扩展、
- 新的、更易于使用的初始化函数:PyArray_ImportNumPyAPI 和 PyUFunc_ImportUFuncAPI。
5、改进的行为:
通过采用 NEP 50,改进了类型推广行为。这修正了许多用户对类型推广的惊奇,以前类型推广通常依赖于输入数组的数据值,而不仅仅是它们的 dtypes。有关详细信息,请参阅 NEP 和 NumPy 2.0 移植指南,因为这一变更可能会导致输出 dtypes 发生变化,并降低混合类型操作的精度。
Windows 上的默认整数类型现在是 int64,而不是 int32,这与其他平台上的行为一致、
数组的最大维数从 32 改为 64
兼容性问题:
NumPy 内部结构也发生了很多变化,包括继续将代码从 C 迁移到 C++,这将使将来改进和维护 NumPy 变得更加容易。
建议所有依赖 NumPy ABI 的下游包针对 NumPy 2.0 构建新版本,并验证该版本是否适用于 2.0 和 1.26 - 最好是在 2.0.0rc1(将是 ABI 稳定的)和最终的 2.0.0 版本之间的时期内,以避免给用户带来问题。
版本稳定性
NumPy 2.0.0是自 2006 年以来第一个主要版本,这是开源库良好管理模式的一个范例。在设计公共应用程序接口时,不应在短时间内对应用程序接口进行破坏性更改,并且应尽量减少需要维护的 LTS 分支。
这可以让工业项目赶上你的大部分功能和文档。数年后,您终于可以重新审视您的传统 API,重新设计它们并将其升级到版本 2,同时还能保持向后兼容性。
SQLAlchemy 是另一个正确构建的库。