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 必须使用元组作为
out
kwarg.这完成了在 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
子命令的编译器调用.