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)具有多个输出的 UFunc 必须使用元组作为
out
关键字参数。这完成了 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 的非灵活数据类型 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
现在在 0 维数组上产生一致的结果#
在 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)
当 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
#
版本 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 时发出警告#
当通过 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
将向 build
子命令添加 --warn-error
,这会渗透到 build_ext
和 build_lib
子命令。这将在这些阶段添加编译器标志,并将编译器警告转换为错误,同时实际构建 NumPy 本身,避免 build_src
子命令的编译器调用。