NumPy 1.18.0 发布说明#
除了通常的错误修复外,此NumPy版本清理并记录了新的随机C-API,过期了大量旧的弃用,并改进了文档的外观.支持的Python版本为3.5-3.8.这是最后一个支持Python 3.5的NumPy发布系列.
下游开发者应使用 Cython >= 0.29.14 以支持 Python 3.8,并使用 OpenBLAS >= 3.7 以避免 Skylake 架构上的问题.
亮点#
numpy.random的 C-API 已经定义并文档化.与64位BLAS和LAPACK库链接的基本基础设施.
许多文档改进.
新功能#
多元超几何分布已添加到 numpy.random#
方法 multivariate_hypergeometric 已添加到类 numpy.random.Generator 中.此方法从多元超几何概率分布生成随机变量.(gh-13794)
弃用#
np.fromfile 和 np.fromstring 在遇到坏数据时会报错#
在未来的 numpy 版本中,函数 np.fromfile 和 np.fromstring 在解析错误数据时将抛出错误.现在这将给出 DeprecationWarning,而之前会静默返回部分甚至无效的数据.这一弃用也影响 C 定义的函数 PyArray_FromString 和 PyArray_FromFile (gh-13605)
在 ma.fill_value 中弃用非标量数组作为填充值#
将 MaskedArray.fill_value 设置为非标量数组已被弃用,因为将填充值广播到数组的逻辑是脆弱的,尤其是在切片时.(gh-13698)
弃用 PyArray_As1D, PyArray_As2D#
PyArray_As1D、PyArray_As2D 已被弃用,请改用 PyArray_AsCArray (gh-14036)
弃用 np.alen#
np.alen 已被弃用.请改用 len.(gh-14181)
弃用财务函数#
根据 NEP-32,财务函数 fv ipmt, irr, mirr, nper, npv, pmt, ppmt, pv 和 rate 已被弃用,并将在 NumPy 1.20 中移除.这些函数的替代品是 Python 包 numpy-financial.(gh-14720)
numpy.ma.mask_cols 和 numpy.ma.mask_row 的 axis 参数已被弃用#
这个参数总是被忽略.(gh-14996)
已过时的弃用#
PyArray_As1D和PyArray_As2D已被PyArray_AsCArray取代 (gh-14036)np.rank已被移除.这在 NumPy 1.10 中已被弃用,并被np.ndim取代.(gh-14039)在 1.13.0 版本中
expand_dims的越界轴弃用已经过期.(gh-14051)PyArray_FromDimsAndDataAndDescr和PyArray_FromDims已被移除(它们将始终引发错误).请改用PyArray_NewFromDescr和PyArray_SimpleNew. (gh-14100)numeric.loads,numeric.load,np.ma.dump,np.ma.dumps,np.ma.load,np.ma.loads已被移除,请使用pickle方法替代 (gh-14256)arrayprint.FloatFormat,arrayprint.LongFloatFormat已被移除,请使用FloatingFormat代替arrayprint.ComplexFormat,arrayprint.LongComplexFormat已被移除,请使用ComplexFloatingFormat代替arrayprint.StructureFormat已被移除,请使用StructureVoidFormat代替 (gh-14259)np.testing.rand已被移除.这在 NumPy 1.11 中已被弃用,并被np.random.rand取代.(gh-14325)在
numpy/lib/utils.py中的类SafeEval已被移除.这在 NumPy 1.10 中已被弃用.请改用np.safe_eval.(gh-14335)在
np.select中移除对布尔值和空条件列表的弃用支持 (gh-14583)数组顺序仅接受 ‘C’, ‘F’, ‘A’, 和 ‘K’.更多宽松的选项在 NumPy 1.11 中已被弃用.(gh-14596)
np.linspace 参数
num必须是一个整数.在 NumPy 1.12 中已弃用.(gh-14620)具有多个输出的 UFuncs 必须使用元组作为
outkwarg.这完成了在 NumPy 1.10 中开始的弃用.(gh-14682)
文件 numpy/testing/decorators.py、numpy/testing/noseclasses.py 和 numpy/testing/nosetester.py 已被移除.它们从未打算公开(所有相关对象都存在于 numpy.testing 命名空间中),并且从 NumPy 1.15.0 开始导入它们会给出弃用警告 (gh-14567)
兼容性说明#
numpy.lib.recfunctions.drop_fields 不再返回 None#
如果使用 drop_fields 来删除所有字段,以前数组会被完全丢弃并返回 None.现在它返回一个与输入形状相同的数组,但没有字段.可以使用以下方式保留旧行为:
dropped_arr = drop_fields(arr, ['a', 'b'])
if dropped_arr.dtype.names == ():
dropped_arr = None
将空的 recarray 转换为 None (gh-14510)
numpy.argmin/argmax/min/max 如果在数组中存在 NaT,则返回 NaT#
numpy.argmin、numpy.argmax、numpy.min 和 numpy.max 如果在数组中存在 NaT,将返回 NaT.(gh-14717)
np.can_cast(np.uint64, np.timedelta64, casting='safe') 现在是 False#
之前这是 True - 然而,这与 uint64 不能安全地转换为 int64 不一致,并导致奇怪的类型解析.
如果这影响了你的代码,请先将 uint64 转换为 int64. (gh-14718)
将随机变量流从 numpy.random.Generator.integers 更改#
在 numpy.random.Generator.integers 中存在一个错误,导致8位和16位整数类型的采样有偏差.修复该错误已改变了与之前版本相比的输出流.(gh-14777)
为 datetime64, timedelta64 添加更多的 ufunc 循环#
np.datetime('NaT') 的行为应该更像 float('Nan').添加所需的基础设施,以便 np.isinf(a) 和 np.isnan(a) 可以在 datetime64 和 timedelta64 dtypes 上运行.还为 numpy.fmin 和 numpy.fmax 添加了特定的循环,这些循环会屏蔽 NaT.这可能需要调整面向用户的代码.具体来说,禁止调用 numpy.isinf 或 numpy.isnan 的代码,或者检查它们是否引发异常的代码将需要适应,错误地调用 numpy.fmax 和 numpy.fmin 而不是 numpy.maximum 或 numpy.minimum 的代码将需要调整.这也会影响 numpy.nanmax 和 numpy.nanmin. (gh-14841)
numpy.random 中移动的模块#
作为API清理的一部分,``numpy.random`` 中的子模块 bit_generator, philox, pcg64, sfc64, ``common, generator, 和 bounded_integers 分别被移动到 _bit_generator, _philox, _pcg64, _sfc64, ``_common, _generator, 和 _bounded_integers 以表明它们不是公共接口的一部分.(gh-14608)
C API 变化#
PyDataType_ISUNSIZED(descr) 现在对于结构化数据类型返回 False#
之前,这会对任何数据类型的 itemsize 0 返回 True,但现在这会对 itemsize 0 的非灵活数据类型返回 false,``np.dtype([])``.(gh-14393)
新功能#
添加我们自己的 *.pxd cython 导入文件#
添加了一个 numpy/__init__.pxd 文件.它将用于 cimport numpy (gh-12284)
现在可以将一组轴输入到 expand_dims 中#
numpy.expand_dims 的 axis 关键字现在可以接受一个轴的元组.以前,``axis`` 必须是整数.(gh-14051)
对 64 位 OpenBLAS 的支持#
增加了对64位(ILP64)OpenBLAS的支持.详情请参见 site.cfg.example . (gh-15012)
添加 --f2cmap 选项到 F2PY#
允许指定一个文件来加载 Fortran-to-C 类型映射自定义项.(gh-15113)
改进#
不同C语言数值类型具有相同的大小,但名称唯一.#
在任何给定的平台上,之前 np.intc、np.int_ 和 np.longlong 中的两个会通过它们的 repr 看起来无法区分,尽管它们对应的 dtype 具有不同的属性.类似的问题也存在于这些类型的无符号对应物中,并且在某些平台上也存在于 np.double 和 np.longdouble 中.
这些类型现在总是以唯一的 __name__ 打印.(gh-10151)
argwhere 现在在 0d 数组上产生一致的结果#
在 N 维数组上,``numpy.argwhere`` 现在总是生成形状为 (n_non_zero, arr.ndim) 的数组,即使在 arr.ndim == 0 的情况下也是如此.以前,在这种情况下,最后一个轴的维度为 1.(gh-13610)
为 random.permutation 和 random.shuffle 添加 axis 参数#
之前,``random.permutation`` 和 random.shuffle 函数只能沿第一个轴对数组进行洗牌;现在它们有了一个新的参数 axis,允许沿指定的轴进行洗牌.(gh-13829)
np.random.multivariate_normal 的 method 关键字参数#
method 关键字参数现在可用于 np.random.multivariate_normal,其可能值为 {'svd', 'eigh', 'cholesky'}.要使用它,请写 np.random.multivariate_normal(..., method=<method>).(gh-14197)
为 numpy.fromstring 添加复数支持#
现在 numpy.fromstring 可以读取复数.(gh-14227)
当 axis 不是 None 时,``numpy.unique`` 具有一致的轴顺序#
在 numpy.unique 中使用 moveaxis 而不是 swapaxes ,这样除了参数中的轴之外的轴的顺序不会被破坏.(gh-14255)
numpy.matmul 现在将布尔输出转换为布尔值#
调用 numpy.matmul 时,如果输出是一个布尔数组,则会用结果的 uint8 等价值填充数组,而不是 0/1.现在它强制输出为 0 或 1(NPY_TRUE 或 NPY_FALSE).(gh-14464)
当范围为 2**32 时,``numpy.random.randint`` 生成了不正确的值#
在1.17.0版本中引入的实现,在确定是否使用32位路径或完整的64位路径时,有一个错误的检查,错误地将范围为``2**32``的高-低随机整数生成重定向到64位生成器.(gh-14501)
为 numpy.fromfile 添加复数支持#
现在 numpy.fromfile 可以读取复数.(gh-14730)
如果编译器名为 gcc,则添加 std=c99#
GCC 在版本5之前需要 -std=c99 命令行参数.较新的编译器会自动开启C99模式.编译器设置代码会自动添加代码,如果编译器名称中有 gcc . (gh-14771)
变化#
NaT 现在排序到数组的末尾#
NaT 现在在排序时被有效地视为最大的整数,因此它会排到数组的末尾.这一改变是为了与 NaN 排序行为保持一致.(gh-12658) (gh-15068)
在 np.set_printoptions 中 threshold 不正确会引发 TypeError 或 ValueError#
之前一个不正确的 threshold 会引发 ValueError;现在对于非数字类型会引发 TypeError,对于 nan 值会引发 ValueError.(gh-13899)
保存带有元数据的 dtype 时发出警告#
当通过 numpy.save 保存带有 metadata 的数组时,会发出一个 UserWarning .保存这样的数组可能不会保留元数据,如果保留了元数据,加载它会导致 ValueError .保存和加载的这一缺陷将在未来的版本中得到解决.(gh-14142)
numpy.distutils 对 LDFLAGS 和类似项的追加行为已更改#
numpy.distutils 总是覆盖而不是追加到 LDFLAGS 和其他类似的用于编译 Fortran 扩展的环境变量.现在默认行为已更改为追加 - 这是大多数情况下的预期行为.要保留旧的(覆盖)行为,请将 NPY_DISTUTILS_APPEND_FLAGS 环境变量设置为 0.这适用于:LDFLAGS、F77FLAGS、F90FLAGS、FREEFLAGS、FOPT、FDEBUG 和 FFLAGS.NumPy 1.16 和 1.17 在行为更改会影响使用的编译标志的情况下给出了构建警告.(gh-14248)
移除 numpy.random.entropy 而不进行弃用#
numpy.random.entropy 在 1.17.0 版本中被添加到 numpy.random 命名空间.它原本是一个私有的 c-扩展模块,但被公开了.它已被 numpy.random.SeedSequence 取代,因此该模块被完全移除.(gh-14498)
添加选项以静默构建配置并通过 -Werror 构建#
添加了两个新的配置选项.在 build_src 子命令期间,作为配置 NumPy 的一部分,文件 _numpyconfig.h 和 config.h 是通过探测各种运行时函数和例程的支持而创建的.以前,这一阶段非常详细的编译器输出掩盖了更重要的信息.默认情况下,输出是静音的.运行 runtests.py --debug-info 将向 build_src 子命令添加 --verbose-cfg,这将恢复之前的行为.
添加 CFLAGS=-Werror 将警告转换为错误会在配置期间触发错误.现在 runtests.py --warn-error 会将 --warn-error 添加到 build 子命令中,这将渗透到 build_ext 和 build_lib 子命令中.这将为这些阶段添加编译器标志,并在实际构建 NumPy 本身时将编译器警告转换为错误,避免 build_src 子命令的编译器调用.