NumPy 1.18.0 发行说明#
除了通常的错误修复之外,此 NumPy 版本还清理并记录了新的 random 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已被删除,请改用FloatingFormatarrayprint.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 )
如果数组中存在 NaT ,则 numpy.argmin/argmax/min/max 返回 NaT#
如果数组中存在 NaT , numpy.argmin , numpy.argmax , numpy.min 和 numpy.max 将返回 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 dtype 上运行. 还为屏蔽 NaT 的 numpy.fmin 和 numpy.fmax 添加了特定循环. 这可能需要调整面向用户的代码. 具体来说,要么不允许调用 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 的非灵活数据类型 np.dtype([]) ,此函数返回 False.( 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 到 C 类型映射的自定义.( gh-15113 )
改进#
相同大小的不同 C 数字类型具有唯一的名称#
在任何给定的平台上, np.intc , np.int_ 和 np.longlong 中的两个之前看起来无法通过它们的 repr 来区分,尽管它们对应的 dtype 具有不同的属性. 对于这些类型的无符号对应类型,以及在某些平台上对于 np.double 和 np.longdouble ,存在类似的问题.
这些类型现在总是以唯一的 __name__ 打印.( gh-10151 )
argwhere 现在在 0d 数组上产生一致的结果#
在 N-d 数组上, 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 )
method 关键字参数用于 np.random.multivariate_normal#
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 )
当范围为 232 时, numpy.random.randint 产生错误的值#
在 1.17.0 中引入的实现在确定是使用 32 位路径还是完整的 64 位路径时,有一个不正确的检查,该检查错误地将具有 high - low 范围为 232 的随机整数生成重定向到 64 位生成器.( gh-14501 )
为 numpy.fromfile 添加复数支持#
现在 numpy.fromfile 可以读取复数.( gh-14730 )
如果编译器名为 gcc ,则添加 std=c99#
版本 5 之前的GCC 需要 -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 时发出警告#
当使用带有 metadata 的 numpy.save 保存数组时,将发出 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 将添加 --verbose-cfg 到 build_src 子命令,这将恢复以前的行为.
添加 CFLAGS=-Werror 将警告转换为错误,这会在配置期间触发错误.现在 runtests.py --warn-error 将添加 --warn-error 到 build 子命令,该子命令将渗透到 build_ext 和 build_lib 子命令.这会将编译器标志添加到这些阶段,并在实际构建 NumPy 本身时将编译器警告转换为错误,从而避免 build_src 子命令编译器调用.