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.fromfilenp.fromstring 将在数据错误时报错#

在未来的 NumPy 版本中,当解析错误数据时,np.fromfilenp.fromstring 函数将抛出错误。现在这将给出 DeprecationWarning 警告,而以前则会静默返回部分甚至无效的数据。此弃用也影响 C 定义的函数 PyArray_FromStringPyArray_FromFile (gh-13605)

弃用在 ma.fill_value 中使用非标量数组作为填充值#

自将 MaskedArray.fill_value 设置为非标量数组以来,弃用将填充值广播到数组的逻辑很脆弱,尤其是在切片时。(gh-13698)

弃用 PyArray_As1DPyArray_As2D#

PyArray_As1DPyArray_As2D 已弃用,请改用 PyArray_AsCArray (gh-14036)

弃用 np.alen#

np.alen 已弃用。请改用 len。(gh-14181)

弃用金融函数#

根据 NEP-32,金融函数 fv ipmtirrmirrnpernpvpmtppmtpvrate 已弃用,并将从 NumPy 1.20 中移除。这些函数的替代品是 Python 包 numpy-financial。(gh-14720)

numpy.ma.mask_colsnumpy.ma.mask_rowaxis 参数已弃用#

此参数始终被忽略。(gh-14996)

已失效的弃用#

  • PyArray_As1DPyArray_As2D 已被移除,改用 PyArray_AsCArray (gh-14036)

  • np.rank 已被移除。这在 NumPy 1.10 中已弃用,并已被 np.ndim 替代。(gh-14039)

  • 在 1.13.0 中 expand_dims 超出范围的轴的弃用已失效。(gh-14051)

  • PyArray_FromDimsAndDataAndDescrPyArray_FromDims 已被移除(它们将始终引发错误)。请改用 PyArray_NewFromDescrPyArray_SimpleNew。(gh-14100)

  • numeric.loadsnumeric.loadnp.ma.dumpnp.ma.dumpsnp.ma.loadnp.ma.loads 已被移除,请改用 pickle 方法 (gh-14256)

  • arrayprint.FloatFormatarrayprint.LongFloatFormat 已被移除,请改用 FloatingFormat

  • arrayprint.ComplexFormatarrayprint.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 必须对 out kwarg 使用元组。这完成了在 NumPy 1.10 中开始的弃用。(gh-14682)

numpy/testing/decorators.pynumpy/testing/noseclasses.pynumpy/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.argminnumpy.argmaxnumpy.minnumpy.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)

datetime64timedelta64添加更多ufunc循环#

np.datetime('NaT')的行为应该更像float('Nan')。添加必要的基础设施,以便np.isinf(a)np.isnan(a)可以在datetime64timedelta64数据类型上运行。还为numpy.fminnumpy.fmax添加了特定的循环,这些循环会屏蔽NaT。这可能需要调整用户界面代码。具体来说,禁止调用numpy.isinfnumpy.isnan或检查它们是否引发异常的代码需要进行调整,以及错误地调用numpy.fmaxnumpy.fmin而不是numpy.maximumnumpy.minimum的代码需要进行调整。这也影响numpy.nanmaxnumpy.nanmin。(gh-14841)

移动numpy.random中的模块#

作为API清理的一部分,numpy.random中的子模块bit_generatorphiloxpcg64sfc64commongeneratorbounded_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_dimsaxis关键字现在可以接受轴元组。以前,axis必须是整数。(gh-14051)

支持64位OpenBLAS#

增加了对64位(ILP64) OpenBLAS的支持。详情请参见site.cfg.example。(gh-15012)

向F2PY添加--f2cmap选项#

允许指定一个文件来加载Fortran到C类型映射自定义项。(gh-15113)

改进#

相同大小的不同C数值类型具有唯一的名称#

在任何给定平台上,np.intcnp.int_np.longlong中的两个之前会通过它们的repr看起来无法区分,尽管它们对应的dtype具有不同的属性。这些类型的无符号对应类型也存在类似问题,并且在某些平台上np.doublenp.longdouble也存在类似问题。

这些类型现在始终使用唯一的__name__打印。(gh-10151)

argwhere现在在0d数组上产生一致的结果#

在N维数组上,numpy.argwhere现在始终产生形状为(n_non_zero, arr.ndim)的数组,即使arr.ndim == 0。以前,在这种情况下,最后一个轴的维度为1。(gh-13610)

random.permutationrandom.shuffle添加axis参数#

以前,random.permutationrandom.shuffle函数只能沿第一个轴对数组进行混洗;它们现在有一个新的参数axis,允许沿指定的轴进行混洗。(gh-13829)

np.random.multivariate_normalmethod关键字参数#

现在np.random.multivariate_normal可以使用method关键字参数,其可能值为{'svd', 'eigh', 'cholesky'}。要使用它,请编写np.random.multivariate_normal(..., method=<method>)。(gh-14197)

numpy.fromstring添加复数支持#

现在numpy.fromstring可以读取复数。(gh-14227)

numpy.uniqueaxis不为None时具有一致的轴顺序#

numpy.unique中使用moveaxis代替swapaxes,以便不会破坏参数中轴以外的轴的顺序。(gh-14255)

布尔输出的numpy.matmul现在转换为布尔值#

调用numpy.matmul,如果输出是布尔数组,则该数组将填充为结果的 uint8 等效值,而不是 0/1。现在它强制输出为 0 或 1(NPY_TRUENPY_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#

5 版之前的 GCC 需要-std=c99命令行参数。较新的编译器会自动启用 C99 模式。如果编译器名称中包含gcc,则编译器设置代码将自动添加该代码。( gh-14771)

更改#

NaT现在排序到数组的末尾#

现在,NaT在排序方面有效地被视为最大的整数,因此它排序到数组的末尾。此更改是为了与NaN排序行为保持一致。( gh-12658) (gh-15068)

np.set_printoptions中的不正确的threshold引发TypeErrorValueError#

以前,不正确的threshold会引发ValueError;现在,对于非数值类型,它会引发TypeError,对于nan值,它会引发ValueError。( gh-13899)

保存具有元数据的 dtype 时发出警告#

使用metadata通过numpy.save保存数组时,将发出UserWarning。保存此类数组可能不会保留元数据,如果保留了元数据,则加载它将导致ValueError。保存和加载中的此缺点将在未来的版本中解决。( gh-14142)

对于 LDFLAGS 和类似内容,numpy.distutils 的附加行为已更改#

numpy.distutils 始终覆盖而不是附加到LDFLAGS以及其他类似的环境变量以编译 Fortran 扩展。现在默认行为已更改为附加——这在大多数情况下是预期的行为。要保留旧的(覆盖)行为,请将NPY_DISTUTILS_APPEND_FLAGS环境变量设置为 0。这适用于:LDFLAGSF77FLAGSF90FLAGSFREEFLAGSFOPTFDEBUGFFLAGS。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.hconfig.h文件。以前,此阶段中非常详细的编译器输出掩盖了更重要的信息。默认情况下,输出将被静默。运行runtests.py --debug-info将向build_src子命令添加--verbose-cfg,这将恢复之前的行为。

添加CFLAGS=-Werror以将警告转换为错误将在配置期间触发错误。现在runtests.py --warn-error将向build子命令添加--warn-error,这将渗透到build_extbuild_lib子命令中。这会将编译器标志添加到这些阶段,并在实际构建 NumPy 本身时将编译器警告转换为错误,从而避免build_src子命令编译器调用。

(gh-14527) (gh-14518)