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
数据类型上运行。还为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的非灵活数据类型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)
向F2PY添加--f2cmap
选项#
允许指定一个文件来加载Fortran到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
关键字参数#
现在np.random.multivariate_normal
可以使用method
关键字参数,其可能值为{'svd', 'eigh', 'cholesky'}
。要使用它,请编写np.random.multivariate_normal(..., method=<method>)
。(gh-14197)
为numpy.fromstring
添加复数支持#
现在numpy.fromstring
可以读取复数。(gh-14227)
numpy.unique
在axis
不为None时具有一致的轴顺序#
在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
#
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)
对于 LDFLAGS 和类似内容,numpy.distutils
的附加行为已更改#
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
将向build
子命令添加--warn-error
,这将渗透到build_ext
和build_lib
子命令中。这会将编译器标志添加到这些阶段,并在实际构建 NumPy 本身时将编译器警告转换为错误,从而避免build_src
子命令编译器调用。