NumPy 2.2.0 发行说明#
NumPy 2.2.0 版本是一个快速发布版本,使我们重新与通常一年两次的发布周期保持同步.进行了一些小的清理工作,以及完成新的 StringDType 和改进对自由线程 Python 的支持.重点包括:
新函数
matvec和vecmat,见下文.许多改进的注释.
改进了对新的 StringDType 的支持.
改进了对自由线程 Python 的支持
修复了 f2py
此版本支持 Python 3.10-3.13 版本.
弃用#
_add_newdoc_ufunc现在已弃用.应改用ufunc.__doc__ = newdoc.( gh-27735 )
已过期的弃用#
bool(np.array([]))和其他空数组现在将引发错误.请改用arr.size > 0来检查数组是否没有元素.( gh-27160 )
兼容性说明#
新特性#
用于矩阵-向量和向量-矩阵乘积的新函数
定义了两个新的广义 ufuncs:
numpy.matvec- 矩阵-向量积,将参数分别视为矩阵和列向量的堆栈.numpy.vecmat- 向量-矩阵积,将参数分别视为列向量和矩阵的堆栈.对于复向量,采用共轭.
这些添加到现有的
numpy.matmul以及 numpy 2.0 中添加的numpy.vecdot.请注意,
numpy.matmul永远不会进行复共轭,即使当它的左输入是向量时也不会,而numpy.vecdot和numpy.vecmat都会对左侧的复向量进行共轭(这些复向量被认为是转置的向量,遵循物理学惯例).( gh-25675 )
np.complexfloating[T, T]现在也可以写成np.complexfloating[T]( gh-27420 )
UFuncs 现在支持
__dict__属性并允许覆盖__doc__(直接或通过ufunc.__dict__["__doc__"]).__dict__也可以用于覆盖其他属性,例如__module__或__qualname__.( gh-27735 )
np.number及其子类型的 “nbit” 类型参数现在默认为typing.Any.这样,类型检查器会将诸如x: np.floating之类的注解推断为x: np.floating[Any],即使在严格模式下也是如此.( gh-27736 )
改进#
datetime64和timedelta64哈希现在可以正确匹配 Python 的内置datetime和timedelta哈希.即使对于具有不同时间单位的相等值,哈希现在的计算结果也相等.( gh-14622 )
修复了围绕具有 StringDType 参数的字符串 ufunc 的一些提升问题.现在,使用字符串 ufunc 混合 StringDType 和固定宽度 DType 应该会产生更统一的结果.
( gh-27636 )
改进了对空
memmap的支持.以前,除非设置了非零offset,否则空的memmap将失败.现在,即使offset=0,也支持零大小的memmap.为了实现这一点,如果memmap映射到一个空文件,则该文件将填充一个字节.( gh-27723 )
f2py 处理多个模块并再次公开变量#
修复了一个回归问题,该问题允许 F2PY 用户在仅包含赋值的模块中将变量公开给 Python,并且还修复了单个源文件中存在多个模块的情况.
( gh-27695 )
性能改进和更改#
改进了在自由线程构建中,当许多线程同时调用相同的 ufunc 操作时,多线程的伸缩性.
( gh-27896 )
NumPy 现在对协议使用快速失败属性查找.这可以大大减少函数调用或数组创建的开销,尤其是在使用自定义 Python 对象时.在 Python 3.12 或更高版本上,改进效果最为显著.
( gh-27119 )
在 x86_64 和 i686 上的 OpenBLAS 构建时使用的内核较少.根据基准测试,这些内核周围有 5 个性能集群:
PRESCOTT NEHALEM SANDYBRIDGE HASWELL SKYLAKEX.Windows 上的 OpenBLAS 链接时不再使用 quadmath,简化了许可
由于 Windows 上的 OpenBLAS 存在回归,因此在使用 OpenBLAS 0.3.26 的多个线程时,性能改进被还原.
( gh-27147 )
NumPy 现在也为 Linux 上大型
np.zeros分配指示巨页(hugepages).因此,通常应该提高性能.( gh-27808 )
变更#
现在,
numpy.fix不会对整数和布尔数据类型输入数组执行到浮点数据类型的转换.( gh-26766 )
numpy.float64和numpy.complex128的类型注解现在反映了它们分别是内置float和complex类型的子类型.此更新可防止静态类型检查器报告如下错误:x: float = numpy.float64(6.28) # valid z: complex = numpy.complex128(-1j) # valid
( gh-27334 )
足够大的数组的
repr可以被概括(即,其中元素被替换为...),现在包括数组的shape,类似于零大小和非明显形状的数组的情况.通过此更改,当无法从值推断形状时,始终会给出形状.请注意,虽然写为shape=...,但实际上无法将此参数传递给np.array构造函数.如果遇到问题,例如由于 doctest 失败,您可以使用 print 选项legacy=2.1来获得旧的行为.( gh-27482 )
当传递
return_scalar(在 NumPy 2 中添加)时,直接在 NumPy 数组或标量上调用__array_wrap__现在可以正确处理.现在可以安全地对非标量结果调用标量__array_wrap__.( gh-27807 )
将 musllinux CI 镜像和 wheels 从 1_1 提升至 1_2.这是因为 1_1 已经 end of life .
( gh-27088 )
NEP 50 推广状态选项已移除#
NEP 50 推广状态设置现已删除.它们始终是作为测试的临时手段.如果环境变量设置为除 NPY_PROMOTION_STATE=weak 之外的任何值,则会发出警告,同时删除 _set_promotion_state 和 _get_promotion_state .如果代码使用了 _no_nep50_warning ,则可以使用 contextlib.nullcontext 在不可用时替换它.
( gh-27156 )