原文:
numpy.org/doc/
NumPy 1.19.5 发布说明
原文:
numpy.org/doc/1.26/release/1.19.5-notes.html
NumPy 1.19.5 是一个小的 bug 修复版本。除了修复了一些错误外,主要的改进是更新到了 OpenBLAS 0.3.13,在不中断其他平台执行的同时解决了 Windows 2004bug。此版本支持 Python 3.6-3.9,并计划是 1.19.x 循环中的最后一个版本。
贡献者
总共有 8 个人为此次发布做出了贡献。名字中带有“ ”的人第一次为该补丁做出贡献。
- Charles Harris
- Christoph Gohlke
- Matti Picus
- Raghuveer Devulapalli
- Sebastian Berg
- Simon Graham
- Veniamin Petrenko
- Bernie Gray
合并的拉取请求
本次发布合并了 11 个拉取请求。
- #17756: BUG: 修复由于 floatstatus 超出界限指针而导致的 segfault…
- #17774: BUG: 修复 np.timedelta64(‘nat’).format 引发异常的问题
- #17775: BUG: 修复 array_tofile 中的文件句柄泄漏。
- #17786: BUG: 在维度发现过程中引发递归错误
- #17917: BUG: 修复在 fromfile 中使用过大计数的子数组数据类型
- #17918: BUG: ‘bool’对象没有‘ndim’属性
- #17919: BUG: 确保 _UFuncNoLoopError 可以被 pickled
- #17924: BLD: 在 OpenBLAS 中使用 BUFFERSIZE=20
- #18026: BLD: 更新至 OpenBLAS 0.3.13
- #18036: BUG: 使变量易失性以解决 clang 编译器的错误
- #18114: REL: 为 NumPy 1.19.5 版本做准备。
贡献者
总共有 8 个人为此次发布做出了贡献。名字中带有“ ”的人第一次为该补丁做出贡献。
- Charles Harris
- Christoph Gohlke
- Matti Picus
- Raghuveer Devulapalli
- Sebastian Berg
- Simon Graham
- Veniamin Petrenko
- Bernie Gray
合并的拉取请求
本次发布合并了 11 个拉取请求。
- #17756: BUG: 修复由于 floatstatus 超出界限指针而导致的 segfault…
- #17774: BUG: 修复 np.timedelta64(‘nat’).format 引发异常的问题
- #17775: BUG: 修复 array_tofile 中的文件句柄泄漏。
- #17786: BUG: 在维度发现过程中引发递归错误
- #17917: BUG: 修复在 fromfile 中使用过大计数的子数组数据类型
- #17918: BUG: ‘bool’对象没有‘ndim’属性
- #17919: BUG: 确保 _UFuncNoLoopError 可以被 pickle 化
- #17924: BLD: 在 OpenBLAS 中使用 BUFFERSIZE=20
- #18026: BLD: 更新至 OpenBLAS 0.3.13
- #18036: BUG: 使一个变量成为 volatile 以解决 clang 编译器的一个 bug
- #18114: REL: 为 NumPy 1.19.5 版本做准备。
NumPy 1.19.4 发布说明
原文:
numpy.org/doc/1.26/release/1.19.4-notes.html
NumPy 1.19.4 是一个快速发布版本,用于还原 OpenBLAS 库的版本。希望在 1.19.3 中使用的 0.3.12 OpenBLAS 版本能解决 Microsoft fmod bug 的问题,但在某些 Docker 环境中出现了问题。相反,1.19.4 将使用旧库并在导入时运行健全性检查,如果检测到问题,将引发错误。Microsoft 已意识到了这个问题,并承诺在修复后,用户应升级。
此版本支持 Python 3.6-3.9
贡献者
共有 1 人贡献了此版本。有人名字旁有“ ”符号的为首次贡献补丁的人。
- 查尔斯·哈里斯
已合并的拉取请求
共有 2 个拉取请求已合并到此版本。
- #17679: 维护:添加针对 Windows 10 版本 2004 漏洞的检查。
- #17680: 修订:为 1.19.4 版本恢复 OpenBLAS 到 1.19.2 版本
贡献者
共有 1 人贡献了此版本。有人名字旁有“ ”符号的为首次贡献补丁的人。
- 查尔斯·哈里斯
已合并的拉取请求
共有 2 个拉取请求已合并到此版本。
- #17679: 维护:添加针对 Windows 10 版本 2004 漏洞的检查。
- #17680: 修订:为 1.19.4 版本恢复 OpenBLAS 到 1.19.2 版本
NumPy 1.19.3 发布说明
原文:
numpy.org/doc/1.26/release/1.19.3-notes.html
NumPy 1.19.3 是一个小型维护版本,有两个主要改进:
- 所有受支持平台上的 Python 3.9 二进制轮子。
- 针对 Windows 10 2004 版本 fmod bug 的 OpenBLAS 修复。
这个版本支持 Python 3.6-3.9,并且链接了 OpenBLAS 0.3.12 以避免在 Windows 10 2004 版本上的一些 fmod 问题。微软已经意识到了这个问题,用户应该在修复可用时升级,这里的修复范围有限。
贡献者
这个版本共有 8 人为其做出了贡献。名字后带“ ”符号的人员是首次贡献补丁的。
- Charles Harris
- Chris Brown
- Daniel Vanzo
-
- Madison Bray
- Hugo van Kemenade
- Ralf Gommers
- Sebastian Berg
- @danbeibei
合并的拉取请求
这个版本共合并了 10 个拉取请求。
- #17298: 构建: 为构建依赖设置上限版本
- #17336: 修复: 在 PyArray_InitArrFuncs 中将已弃用字段设为 null
- #17446: 增强: 警告不支持的 Python 3.10
- #17450: 维护: 更新 test_requirements.txt。
- #17522: 增强: 支持 NVIDIA HPC SDK nvfortran 编译器
- #17568: 修复: 受影响平台上的 Cygwin 对 #14787 的回避方法
- #17647: 修复: 由于放宽步幅导致的缓冲区信息缓存内存泄漏
- #17652: 维护: 从主分支回溯 openblas_support。
- #17653: 测试: 在 Windows、Mac 上将 Python 3.9 添加到 CI 测试。
- #17660: 测试: 简化 test_extending 中的源路径名称。
贡献者
这个版本共有 8 人为其做出了贡献。名字后带“ ”符号的人员是首次贡献补丁的。
- Charles Harris
- Chris Brown
- Daniel Vanzo
-
- Madison Bray
- Hugo van Kemenade
- Ralf Gommers
- Sebastian Berg
- @danbeibei
合并的拉取请求
这个版本共合并了 10 个拉取请求。
- #17298: 构建: 为构建依赖设置上限版本
- #17336: 修复: 在 PyArray_InitArrFuncs 中将已弃用字段设为 null
- #17446: 增强: 警告不支持的 Python 3.10
- #17450: 维护: 更新 test_requirements.txt。
- #17522: 增强: 支持 NVIDIA HPC SDK nvfortran 编译器
- #17568: 修复: 受影响平台上的 Cygwin 对 #14787 的回避方法
- #17647: BUG: 修复因放松步幅而导致的缓冲区信息缓存内存泄漏。
- #17652: MAINT: 从主分支中回溯 openblas_support。
- #17653: TST: 在 Windows、Mac 上的 CI 测试中添加 Python 3.9。
- #17660: TST: 简化 test_extending 中的源路径名称。
NumPy 1.19.2 发布说明
原文:
numpy.org/doc/1.26/release/1.19.2-notes.html
NumPy 1.19.2 修复了几个 bug,为即将到来的 Cython 3.x 版本做准备,并固定 setuptools,以便在上游修改正在进行时仍让 distutils 工作。aarch64 轮子是使用最新的 manylinux2014 发行版构建的,解决了不同 Linux 发行版使用不同页面大小的问题。
本发布版支持 Python 3.6-3.8。在使用 Python 3.9 进行测试时,需要使用 Cython >= 0.29.21。
我们正在努力排查 Windows 10 版本=2004 和 OpenBLAS svd 存在的已知问题。如果你使用的是该版本的 Windows,你应该使用链接到 MKL 库的 NumPy 版本,较早版本的 Windows 则没有问题。
改进
为 Cython 3.0 及更高版本添加 NumPy 声明
改进了 Cython 3.0 版本的 pxd 声明,避免使用已弃用的 NumPy C-API 特性。现在,使用 NumPy 的 Cython 3.0 构建的扩展模块可以设置 C 宏 NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
,避免 C 编译器对已弃用 API 用法的警告。
贡献者
本发布版共有 8 位贡献者。名字后面带有“ ”的人首次贡献了一个补丁。
- Charles Harris
- Matti Picus
- Pauli Virtanen
- Philippe Ombredanne
- Sebastian Berg
- Stefan Behnel
- Stephan Loyd
- Zac Hatfield-Dodds
已合并的拉取请求
本发布版共合并了 9 个拉取请求。
- #16959: 测试: 在 travis.yml 中将 aarch64 改为 arm64
- #16998: 维护: 为
np.test()
配置假设以确保确定性,… - #17000: 构建: pin setuptools < 49.2.0
- #17015: 增强: 为 Cython 3.0 添加可用的 NumPy 声明
- #17125: BUG: 修复 fft 计算中非线程安全的 sigint 处理
- #17243: BUG: core: 修复 ilp64 blas dot/vdot/… 在 strides > int32 max 时的问题
- #17244: 文档: 使用正确的许可证的 SPDX 许可证表达式
- #17245: 文档: 修复旧 API 函数中对快速入门的链接
- #17272: BUG: 修复大于 2GiB 的数组的 pickle
改进
为 Cython 3.0 及更高版本添加 NumPy 声明
改进了 Cython 3.0 版本的 pxd 声明,避免使用已弃用的 NumPy C-API 特性。现在,使用 NumPy 的 Cython 3.0 构建的扩展模块可以设置 C 宏 NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
,避免 C 编译器对已弃用 API 用法的警告。
为 Cython 3.0 及更高版本添加 NumPy 声明
为了避免使用已弃用的 NumPy C-API 特性,Cython 3.0 的 pxd 声明得到了改进。现在,使用 Cython 3.0 构建的扩展模块可以设置 C 宏NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
,以避免关于使用已弃用 API 的 C 编译器警告。
贡献者
总共有 8 个人为此版本做出了贡献。在其名字后带有“ ”的人第一次为补丁做出了贡献。
- Charles Harris
- Matti Picus
- Pauli Virtanen
- Philippe Ombredanne
- Sebastian Berg
- Stefan Behnel
- Stephan Loyd
- Zac Hatfield-Dodds
合并的拉取请求
总共有 9 个拉取请求被合并到此版本。
- #16959: 测试:在 travis.yml 中将 aarch64 更改为 arm64。
- #16998: 维护:在
np.test()
中配置假设(hypothesis)以实现确定性,… - #17000: 构建:设置 setuptools<49.2.0 的版本
- #17015: 增强:为 Cython 3.0 添加 NumPy 声明
- #17125: 错误修复:从 fft 计算中删除不线程安全的 sigint 处理
- #17243: 错误修复:核心:修复 strides > int32 max 时的 ilp64 blas dot/vdot/…
- #17244: 文档:使用正确的许可 SPDX 许可表达式
- #17245: 文档:修复旧 API 函数中快速启动的链接
- #17272: 错误修复:修复大于 2GiB 的数组的 pickling
NumPy 1.19.1 发布说明
译文:
numpy.org/doc/1.26/release/1.19.1-notes.html
NumPy 1.19.1 修复了 1.19.0 发布中发现的几个 bug,替换了即将在 Python 3.9 发布中弃用的几个函数,改进了对 AIX 的支持,并做了一些开发相关的更新以维持与最近上游更改的持续集成(CI)的工作。
本次发布支持 Python 3.6-3.8。测试时需要使用 Python 3.9 构建时需使用 Cython >= 0.29.21。
Contributors
本次发布有 15 人做出了贡献。其中名字后面带有“ ”的是首次贡献补丁的人。
- Abhinav Reddy
- Anirudh Subramanian
- Antonio Larrosa
- Charles Harris
- Chunlin Fang
- Eric Wieser
- Etienne Guesnet
- Kevin Sheppard
- Matti Picus
- Raghuveer Devulapalli
- Roman Yurchak
- Ross Barnowski
- Sayed Adel
- Sebastian Berg
- Tyler Reddy
合并的拉取请求
本次发布合并了共计 25 个拉取请求。
- #16649: MAINT, CI: 禁用 Shippable cache
- #16652: MAINT: 用 PyUnicode_GetLength 替换 PyUString_GET_SIZE。
- #16654: REL: 修复过时的文档链接
- #16656: BUG: 在 AIX 上引发 IEEE 异常
- #16672: BUG: 修复处理数组时 AVX 复数绝对值中的 bug
- #16693: TST: 在 CPU 功能检测中添加额外的调试信息
- #16703: BLD: 为 Emscripten / WebAssembly 添加 CPU 条目
- #16705: TST: 禁用 Python 3.9-dev 测试。
- #16714: MAINT: 在 ValueError 情况下禁用 use_hugepages
- #16724: BUG: 修复 PyArray_SearchSorted 的签名。
- #16768: MAINT: 修复 scalartypes.c.src 中的弃用函数
- #16772: MAINT: 移除不必要的对 PyUnicode_READY 的调用
- #16776: MAINT: 修复 scalarapi.c 中的弃用函数
- #16779: BLD, ENH: 为 AIX 添加 RPATH 支持
- #16780: BUG: 修复 genfromtxt 中的默认回退
- #16784: BUG: 在 methods.c 中引发错误后添加了丢失的返回
- #16795: BLD: 更新 cython 至 0.29.21
- #16832: MAINT: setuptools 49.2.0 产生警告,避免它
- #16872: BUG: 验证二项式和多项式输出大小
- #16875: BLD, MAINT: 固定 setuptools 版本
- #16904: DOC:重构测试指南。
- #16905: TST, BUG:在 test_large_zip 中重新引发 MemoryError 异常的例外
- #16906: BUG,DOC:修复错误的 MPL 参数。
- #16916: BUG:修复字符串/字节到复数赋值
- #16922: REL:准备 NumPy 1.19.1 版本发布
贡献者
本次发布共有 15 人做出贡献。名字后面有“ ”的人第一次为此发布贡献了补丁。
- Abhinav Reddy
- Anirudh Subramanian
- Antonio Larrosa
- Charles Harris
- Chunlin Fang
- Eric Wieser
- Etienne Guesnet
- Kevin Sheppard
- Matti Picus
- Raghuveer Devulapalli
- Roman Yurchak
- Ross Barnowski
- Sayed Adel
- Sebastian Berg
- Tyler Reddy
已合并的拉取请求
本次发布共合并了 25 个拉取请求。
- #16649: MAINT, CI:禁用 Shippable 缓存
- #16652: MAINT:用PyUnicode_GetLength代替PyUString_GET_SIZE。
- #16654: REL:修复过时的文档链接
- #16656: BUG:在 AIX 上引发 IEEE 异常
- #16672: BUG:在处理数组时修复 AVX 复数绝对值中的错误…
- #16693: TST:在 CPU 特性检测中添加额外的调试信息
- #16703: BLD:为 Emscripten/WebAssembly 添加 CPU 输入
- #16705: TST:禁用 Python 3.9-dev 测试。
- #16714: MAINT:在出现 ValueError 情况下禁用 use_hugepages
- #16724: BUG:修复 PyArray_SearchSorted 签名。
- #16768: MAINT:在 scalartypes.c.src 中修复了已弃用函数
- #16772: MAINT:删除不需要的 PyUnicode_READY 调用
- #16776: MAINT:在 scalarapi.c 中修复已弃用的函数
- #16779: BLD, ENH:为 AIX 添加 RPATH 支持
- #16780: BUG:修复 genfromtxt 中默认的回退
- #16784: BUG:在 methods.c 中引发错误后添加丢失的返回
- #16795: BLD:更新 cython 至 0.29.21
- #16832: MAINT:setuptools 49.2.0 发出警告,避免它
- #16872: BUG:验证二项式和多项式输出大小
- #16875: BLD, MAINT:固定 setuptools 版本
- #16904: DOC:重构测试指南。
- #16905: TST, BUG: 在 test_large_zip 中重新引发 MemoryError 异常…
- #16906: BUG,DOC: 修复坏的 MPL kwarg.
- #16916: BUG: 修复字符串/字节到复数的赋值
- #16922: REL: 为准备 NumPy 1.19.1 版本发布做准备
NumPy 1.19.0 发布说明
原文:
numpy.org/doc/1.26/release/1.19.0-notes.html
这个 NumPy 版本以大量技术债务的清除为标志:不再支持 Python 2,许多弃用的功能已经过期,并且文档得到了改进。 对随机模块的优化持续进行中,包括来自 Cython 的错误修复和更好的可用性。
本版本支持的 Python 版本为 3.6-3.8。 下游开发人员应该使用 Cython >= 0.29.16 来支持 Python 3.8,并且在 Skylake 架构上避免使用 OpenBLAS >= 3.7 出现问题。
亮点
- 代码与 Python 版本 < 3.6(包括 Python 2)的兼容性已从 python 和 C 代码中删除。
numpy.compat
中的兼容层将继续支持第三方包,但可能会在将来的版本中被弃用。 请注意,由于使用了 f-strings,1.19.x 不会与早期版本的 Python 编译。 (gh-15233)
弃用已过期
numpy.insert
和 numpy.delete
在 0d 数组上不能再传递 axis。
这标志着从 1.9 开始的弃用,当axis
参数传递给 0d 数组的~numpy.insert
和~numpy.delete
调用时,axis
和obj
参数以及索引将被完全忽略。 在这些情况下,insert(arr, "nonsense", 42, axis=0)
实际上会覆盖整个数组,而delete(arr, "nonsense", axis=0)
将是arr.copy()
现在在 0d 数组上传递axis
会引发~numpy.AxisError
。
(gh-15802)
numpy.delete
不再忽略超出范围的索引
这标志着从 1.8 和 1.9 开始的弃用,其中 np.delete
将忽略负数和超出范围的索引。 这与将单个索引传递时的行为相矛盾。
现在超出范围的项会抛出 IndexError
,负数项从末尾索引。
(gh-15804)
numpy.insert
和 numpy.delete
不再接受非整数索引
这结束了从 1.9 开始的弃用,允许非整数索引序列并将其转换为整数。 现在传递非整数索引的序列会引发 IndexError
,就像传递单个非整数标量时一样。
(gh-15805)
numpy.delete
不再将布尔索引转换为整数
这结束了从 1.8 开始的弃用,np.delete
将布尔数组和标量转换为整数索引。 现在的行为是将布尔数组视为掩码,并在布尔标量上引发错误。
(gh-15815)
兼容性说明
从numpy.random.Generator.dirichlet
更改随机变量流
通过在max(alpha) < 0.1
时使用不同的算法,修复了对 Dirichlet 分布的小“alpha”值的随机变量生成中的错误。由于更改,此情况下由dirichlet
生成的变量流将与先前的版本不同。
(gh-14924)
在PyArray_ConvertToCommonType
中的标量提升
混合标量和数组在PyArray_ConvertToCommonType
中的提升已更改为遵循np.result_type
使用的规则。这意味着类似(1000, np.array([1], dtype=np.uint8)))
的输入现在将返回uint16
数据类型。在大多数情况下,这不会改变行为。请注意,通常不建议使用此 C-API 函数。这也修复了np.choose
在这方面与 NumPy 的其他部分的行为相同。
(gh-14933)
Fasttake 和 fastputmask 插槽已经被弃用并且设为 NULL
现在永远不会使用 fasttake 和 fastputmask 插槽,必须始终设置为 NULL。这不会导致行为上的任何改变。但是,如果用户 dtype 应该设置其中之一,将会给出 DeprecationWarning。
(gh-14942)
np.ediff1d
通过使用 to_end
和 to_begin
参数的转换行为
np.ediff1d
现在对其额外的to_end
和to_begin
参数使用"same_kind"
转换规则。这确保了除非输入数组的整数类型小于to_begin
或to_end
,否则会遵循类型安全性。在少数情况下,行为将比 1.16 和 1.17 中以前更严格。这是解决浮点 NaN 问题所必需的。
(gh-14981)
将空数组对象转换为 NumPy 数组
实现len(obj) == 0
并且实现“数组样式”接口的对象(即实现 obj.__array__()
, obj.__array_interface__
, obj.__array_struct__
或 Python buffer 接口的对象,并且也是序列(即 Pandas 对象)),当转换为数组时,现在将始终正确地保留其形状。如果此类对象先前的形状为(0, 1)
,则可以转换为形状为(0,)
的数组(在第一个 0 后丢失所有维度)。
(gh-14995)
移除 multiarray.int_asbuffer
作为持续删除 Python 2 兼容性的一部分,移除了 multiarray.int_asbuffer
。在 Python 3 上,它抛出了一个 NotImplementedError
并在内部未使用。预计在 Python 3 中不会有使用此方法的下游用例。
(gh-15229)
已移除 numpy.distutils.compat
该模块仅包含一个名为 get_exception()
的函数,用法如下:
try:
...
except Exception:
e = get_exception()
其目的是处理在 Python 2.6 中引入的语法更改,即从except Exception, e:
到except Exception as e:
,这意味着它仅适用于支持 Python 2.5 及更早版本的代码库。
(gh-15255)
issubdtype
不再将float
解释为np.floating
。
numpy.issubdtype
自 NumPy 1.14 以来就有一个过期的FutureWarning
。这意味着某些输入,其中第二个参数既不是数据类型也不是 NumPy 标量类型(例如字符串或像int
或float
这样的 python 类型),现在将与传入np.dtype(arg2).type
保持一致。这使结果符合预期,并在某些以前返回true
的情况下导致错误的结果。
(gh-15773)
更改标量的round
的输出,以使其与 Python 一致
__round__
特殊方法的输出以及因此 Python 内置的round
已更改为 Python int
,以使其与在未传递参数时调用 Python float
对象时的调用一致。以前,它会返回传入的np.dtype
的标量。
(gh-15840)
numpy.ndarray
构造函数不再将strides=()
解释为strides=None
。
前者已更改为将numpy.ndarray.strides
设置为()
的预期含义,而后者继续自动选择步幅。
(gh-15882)
C 级别的字符串到日期时间的转换发生了变化
C 级别的从字符串到数据类型的转换被简化。这一变更也修复了字符串到日期时间和时间差的转换,使其行为正确(即像 Python 转换一样使用string_arr.astype("M8")
,而先前的转换会像string_arr.astype(np.int_).astype("M8")
一样)。这只影响使用低级 C-API 进行手动转换(而不是完整数组转换)的代码,单个标量值或使用PyArray_GetCastFunc
,因此不应影响绝大多数用户。
(gh-16068)
具有小种子的SeedSequence
不再与生成冲突
较小的种子(小于2**96
)以前被隐式地填充为 128 位,即内部熵池的大小。在生成时,生成密钥在填充 0 之前进行连接。由于第一个生成密钥是(0,)
,在生成之前的小种子将创建与第一个生成的SeedSequence
相同的状态。现在,种子在显式填充到内部池大小之前进行填充 0,然后连接生成密钥。生成的SeedSequences
将产生与先前版本不同的结果。未生成的SeedSequences
仍然会产生相同的结果。
(gh-16551)
弃用
弃用对不规则输入的自动dtype=object
调用np.array([[1, [1, 2, 3]])
将根据NEP 34发出DeprecationWarning
。用户应明确使用dtype=object
以避免警告。
(gh-15119)
在numpy.rec
的工厂函数中传递shape=0
已弃用。
0
在以下函数中被看作是一个特殊情况,并被别名为 None
:
-
numpy.core.records.fromarrays
-
numpy.core.records.fromrecords
-
numpy.core.records.fromstring
-
numpy.core.records.fromfile
未来,0
将不再特殊处理,而会像任何其他整数一样被视为数组长度。
(gh-15217)
废弃了可能未被使用的 C-API 函数
以下 C-API 函数可能未被使用,已经被废弃:
-
PyArray_GetArrayParamsFromObject
-
PyUFunc_GenericFunction
-
PyUFunc_SetUsesArraysAsData
在大多数情况下,应该通过转换为数组来替换 PyArray_GetArrayParamsFromObject
,而 PyUFunc_GenericFunction
可以用 PyObject_Call
来替换(详见文档)。
(gh-15427)
转换特定类型到 dtypes 被废弃
标量类型的超类,例如 np.integer
、np.generic
或 np.inexact
,在转换为 dtype(或在 dtype 关键字参数中使用)时,现在会发出废弃警告。原因是 np.integer
被转换为 np.int_
,而人们期望其代表 任何 整型(例如也包括 int8
、int16
等)。例如,dtype=np.floating
当前与 dtype=np.float64
相同,即使 np.float32
也是 np.floating
的子类。
(gh-15534)
废弃了 np.complexfloating
标量的 round
__round__
傻帽方法以及因此而废弃的 Python 内建方法 round
在复数标量上。这不会影响 np.round
。
(gh-15840)
numpy.ndarray.tostring()
被废弃,建议使用 tobytes()
~numpy.ndarray.tobytes
这个函数自 1.9 版本开始就存在了,但直到这个版本之前,~numpy.ndarray.tostring
不会发出任何警告。发出警告的改变使得 NumPy 与同名的内建 array.array
方法达到了一致。
(gh-15867)
C API 的变更
对 API 函数中的 const
维度提供更好的支持
以下函数现在接受一个 npy_intp
的常量数组:
-
PyArray_BroadcastToShape
-
PyArray_IntTupleFromIntp
-
PyArray_OverflowMultiplyList
之前的调用者需要强制取消常量性来调用这些函数。
(gh-15251)
修饰 UFunc 的内循环
UFuncGenericFunction
现在期望指向常量 dimension
和 strides
的指针作为参数。这意味着内循环可能不能再修改 dimension
或 strides
。这个改变会导致 incompatible-pointer-types
警告,强制用户要么忽略编译器警告,要么修饰自己循环的签名以添加 const 限定符。
(gh-15355)
新特性
现在 numpy.frompyfunc
接受一个 identity 参数
这允许在生成的 ufunc 上设置numpy.ufunc.reduce
,意味着它可以用于空调用和多维调用。
(gh-8255)
np.str_
标量现在支持缓冲区协议。
np.str_
数组始终以 UCS4 存储,因此相应的标量现在通过缓冲区接口公开这一点,这意味着memoryview(np.str_('test'))
现在可以使用。
(gh-15385)
为numpy.copy
添加了subok
选项。
在numpy.copy
中添加了一个新的关键字参数subok
,允许用户切换numpy.copy
对于数组子类的行为。默认值为False
,这与以前 numpy 版本中numpy.copy
的行为一致。要保留数组子类的numpy.copy
的副本,调用np.copy(arr, subok=True)
。这个添加更好地记录了numpy.copy
的默认行为与numpy.ndarray.copy
方法不同,后者默认情况下会保留数组子类。
(gh-15685)
numpy.linalg.multi_dot
现在接受out
参数。
out
可以用来避免创建numpy.linalg.multidot
计算的最终产品的不必要副本。
(gh-15715)
numpy.count_nonzero
的keepdims
参数。
numpy.count_nonzero
添加了参数keepdims
,参数与numpy.sum
或numpy.mean
等缩减函数中的含义相同。
(gh-15870)
numpy.array_equal
的equal_nan
参数。
numpy.array_equal
添加了关键字参数equal_nan
。 equal_nan
是一个布尔值,用于切换比较中是否认为nan
值相等(默认为False
)。这与numpy.isclose
和numpy.allclose
等相关函数中使用的 API 相匹配。
(gh-16128)
改进
改进 CPU 功能的检测。
用更通用的函数npy_cpu_init
和npy_cpu_have
替换了之前特定于 gcc 的npy_cpu_supports
机制,以测试 AVX 的支持,并通过NPY_CPU_HAVE
c 宏以及 Python 级别的__cpu_features__
字典公开结果。
(gh-13421)
在后备 lapack_lite 中在 64 位平台上使用 64 位整数大小。
在 64 位平台上使用 64 位整数大小作为后备的 LAPACK 库,当系统没有安装 LAPACK 时,它可以处理大型数组的线性代数。
(gh-15218)
在输入为np.float64
时,使用 AVX512 内在函数来实现np.exp
。
当输入为 np.float64
时,使用 AVX512 内在函数来实现 np.exp
,可以使得 np.float64
输入的 np.exp
性能提升 5-7 倍。在 linux64 上,_multiarray_umath.so
模块约增加了 63 KB。
(gh-15648)
禁用 madvise 巨大页的能力
在 Linux 上,NumPy 以前已经增加了对 madavise 巨大页的支持,这可以改善非常大的数组的性能。不幸的是,在旧版本的内核上,这导致性能回退,因此默认情况下在 4.6 版本之前的内核上已禁用支持。要覆盖默认值,您可以使用环境变量:
代码语言:javascript复制NUMPY_MADVISE_HUGEPAGE=0
或者将其设置为 1 以强制启用支持。请注意,只有在操作系统设置为使用 madvise 透明巨大页时才会有区别。
(gh-15769)
numpy.einsum
接受 NumPy int64
类型的下标列表
当 numpy.einsum
被传递 NumPy int64
数组作为它的下标列表时,不再抛出类型错误。
(gh-16080)
np.logaddexp2.identity
更改为 -inf
~numpy.logaddexp2
现在的身份为 -inf
,允许在空序列上调用它。这与 ~numpy.logaddexp
的身份匹配。
(gh-16102)
变更
删除对 __array__
的额外参数处理
从 NumPy 0.4 开始,代码路径和测试中已经存在一个 __array__(dtype=None, context=None)
的两参数变体。当调用 ufunc(op)
或 ufunc.reduce(op)
时,如果 op.__array__
存在,它会被激活。但是该变体未记录,并且不清楚其用途是什么。已将其移除。
(gh-15118)
numpy.random._bit_generator
移动到 numpy.random.bit_generator
为了将 numpy.random.BitGenerator
和 numpy.random.SeedSequence
暴露给 Cython,_bitgenerator
模块现在公开为 numpy.random.bit_generator
通过一个 pxd
文件提供 Cython 对随机分布的访问权限
c_distributions.pxd
提供了从 Cython 后面的多个随机分布的 c 函数的访问权限,方便使用和扩展它们。
(gh-15463)
修复了 numpy.random.multivariate_normal
中的 eigh
和 cholesky
方法
以前,当传递 method='eigh'
或 method='cholesky'
时,numpy.random.multivariate_normal
产生了错误分布的样本。现在已经修复。
(gh-15872)
修复了 MT19937.jumped
中的跳转实现
此修复改变了从跳转的 MT19937 生成器中生成的流。这不影响直接种子化的 RandomState
或 MT19937
产生的流。
MT19937 跳转代码的翻译包含了一个逆向的循环顺序。MT19937.jumped
匹配了松本真的 Horner 和滑动窗口跳转方法的原始实现。
(gh-16153)
高亮内容
- 代码不再兼容 Python 版本< 3.6(包括 Python 2)的版本。
numpy.compat
中的兼容性代码将继续支持第三方包,但它们可能在将来的版本中被弃用。请注意,由于使用了 f-strings,1.19.x 将不与早期版本的 Python 编译。 (gh-15233)
弃用已过期
无法再向numpy.insert
和numpy.delete
传递 0d 数组的轴
这结束了从 1.9 开始的弃用,当向~numpy.insert
和~numpy.delete
的调用中传递了axis
参数时,0d 数组的axis
和obj
参数和索引将被完全忽略。在这些情况下,insert(arr, "nonsense", 42, axis=0)
实际上会覆盖整个数组,而delete(arr, "nonsense", axis=0)
将是arr.copy()
现在在 0d 数组上传递axis
会引发~numpy.AxisError
。
(gh-15802)
numpy.delete
不再忽略超出范围的索引
这结束了从 1.8 和 1.9 开始的弃用,其中np.delete
在序列索引中会忽略负数和超出范围的项目。与传递单个索引时的行为相矛盾。
现在超出范围的项目会抛出IndexError
,并且负数项目从末尾索引。
(gh-15804)
numpy.insert
和numpy.delete
不再接受非整数索引
这结束了从 1.9 开始的弃用,允许并将非整数索引序列转换为整数。现在传递非整数索引序列会引发IndexError
,就像传递单个非整数标量时一样。
(gh-15805)
numpy.delete
不再将布尔索引转换为整数
这结束了从 1.8 开始的弃用,其中np.delete
会将布尔数组和标量转换为整数索引。现在的行为是将布尔数组作为掩码处理,并对布尔标量引发错误。
(gh-15815)
无法再向numpy.insert
和numpy.delete
传递 0d 数组的轴
这结束了从 1.9 开始的弃用,当向~numpy.insert
和~numpy.delete
的调用中传递了axis
参数时,0d 数组的axis
和obj
参数和索引将被完全忽略。在这些情况下,insert(arr, "nonsense", 42, axis=0)
实际上会覆盖整个数组,而delete(arr, "nonsense", axis=0)
将是arr.copy()
现在在 0d 数组上传递axis
会引发~numpy.AxisError
。
(gh-15802)
numpy.delete
不再忽略超出范围的索引
这解决了从 1.8 版本和 1.9 版本开始的弃用情况,其中np.delete
会忽略序列索引中的负数和超出边界的项目。这与其仅传递单个索引时的行为相矛盾。
现在超出边界的项目会抛出IndexError
,而负数项目索引则从末尾开始。
(gh-15804)
numpy.insert
和numpy.delete
不再接受非整数索引
这解决了从 1.9 版本开始的一种弃用情况,其中允许传递非整数索引的序列并将其转换为整数。现在传递非整数索引的序列会引发IndexError
,就像传递单个非整数标量时一样。
(gh-15805)
numpy.delete
不再将布尔索引转换为整数
这解决了从 1.8 版本开始,np.delete
会将布尔数组和标量转换为索引参数。现在的行为是将布尔数组视为掩码,并对布尔标量抛出错误。
(gh-15815)
兼容性注意事项
将随机变量流从numpy.random.Generator.dirichlet
更改
通过使用不同的算法修复了在小的“alpha”值的 Dirichlet 分布的随机变量生成中的错误,即max(alpha) < 0.1
时。由于更改,这种情况下由dirichlet
生成的随机变量流将与先前版本不同。
(gh-14924)
PyArray_ConvertToCommonType
中的标量提升
PyArray_ConvertToCommonType
中混合标量和数组的提升已更改为符合np.result_type
的提升。这意味着类似(1000, np.array([1], dtype=np.uint8)))
的输入现在会返回uint16
数据类型。在大多数情况下,行为保持不变。请注意,通常不建议使用此 C-API 函数。这也修复了np.choose
在这方面的行为与 NumPy 的其余部分相同。
(gh-14933)
快速获取和快速放置掩码插槽已弃用并置空
快速获取和快速放置掩码插槽现在永远不会被使用,并且必须始终设置为 NULL。这不会导致行为改变。但是,如果用户数据类型应该设置其中一个,将会发出弃用警告。
(gh-14942)
np.ediff1d
与to_end
和 to_begin
的转换行为
np.ediff1d
现在对其附加的to_end
和to_begin
参数使用"same_kind"
转换规则。这可以确保类型安全,除非输入数组的整数类型小于to_begin
或to_end
。在少数情况下,行为将比 1.16 和 1.17 版本中更严格。这是为了解决浮点 NaN 的问题。
(gh-14981)
将空的类数组对象转换为 NumPy 数组
具有len(obj) == 0
的对象,其实现“类数组”接口,指实现obj.__array__()
,obj.__array_interface__
,obj.__array_struct__
或 Python 缓冲区接口的对象,并且也是序列(即 Pandas 对象),现在在转换为数组时将始终正确保留其形状。如果这样的对象以前具有形状(0, 1)
,它可能被转换为形状(0,)
的数组(在第一个 0 后失去所有维度)。
(gh-14995)
删除了multiarray.int_asbuffer
作为持续删除 Python 2 兼容性的一部分,移除了multiarray.int_asbuffer
。在 Python 3 上,它抛出NotImplementedError
并在内部未使用。预计在 Python 3 中不会有此方法的下游用例。
(gh-15229)
numpy.distutils.compat
已被移除
此模块仅包含函数get_exception()
,用法如下:
try:
...
except Exception:
e = get_exception()
它的目的是处理在 Python 2.6 中引入的语法更改,从except Exception, e:
到except Exception as e:
,这意味着它只对支持 Python 2.5 及更早版本的代码库是必要的。
(gh-15255)
issubdtype
不再解释float
为np.floating
numpy.issubdtype
自 NumPy 1.14 以来一直存在 FutureWarning,现在已经过期。这意味着某些输入,其中第二个参数既不是数据类型也不是 NumPy 标量类型(例如字符串或 Python 类型,如int
或float
),现在将与传入np.dtype(arg2).type
保持一致。这使结果符合预期,并在某些情况下导致先前返回 true 的错误结果。
(gh-15773)
更改对标量的round
输出,以使其与 Python 一致
__round__
dunder 方法的输出和因此 Python 内置的round
已更改为 Pythonint
,使其与在无参数调用时在 Pythonfloat
对象上调用它保持一致。先前,在 Pythonfloat
对象上调用时,它将返回传入的np.dtype
的标量。
(gh-15840)
numpy.ndarray
构造函数不再将strides=()
解释为strides=None
前者已更改为将numpy.ndarray.strides
设置为()
的预期含义,而后者则继续导致自动选择间距。
(gh-15882)
C 级字符串到日期时间的转换已更改
从字符串到日期时间和时间增量的 C 级转换已经简化。这一变化也修复了字符串到日期时间和时间增量转换的行为(即像使用string_arr.astype("M8")
的 Python 转换,而之前的转换行为像string_arr.astype(np.int_).astype("M8")
)。这仅影响使用低级 C-API 进行手动转换(而不是完整的数组转换)的代码,因此不会影响绝大多数用户。
(gh-16068)
具有小种子的SeedSequence
不再与生成冲突
小种子(小于2**96
)之前隐式地被填充为 128 位,内部熵池的大小。在生成时,生成密钥被连接在 0 填充之前。由于第一个生成密钥是(0,)
,生成前的小种子创建了与第一个生成的SeedSequence
相同的状态。现在,种子明确地被填充到内部池的大小,然后再连接生成密钥。生成的SeedSequence
将产生与之前版本不同的结果。未生成的SeedSequence
仍将产生相同的结果。
(gh-16551)
从numpy.random.Generator.dirichlet
更改随机变量流
修复了使用不同算法生成小“alpha”值的 Dirichlet 分布的随机变量时的 bug,当max(alpha) < 0.1
时。由于这个变化,在这种情况下,由dirichlet
生成的变量流将与先前的版本不同。
(gh-14924)
在PyArray_ConvertToCommonType
中的标量提升
使用np.result_type
的混合标量和数组在PyArray_ConvertToCommonType
的推广已被更改,以符合其使用的那些。这意味着输入,如(1000, np.array([1], dtype=np.uint8)))
现在将返回uint16
数据类型。在大多数情况下,行为不变。请注意,通常不鼓励使用这个 C-API 函数。这也修复了np.choose
在这方面与 NumPy 的其他部分行为相同。
(gh-14933)
fasttake
和fastputmask
槽已弃用并已设置为NULL
fasttake
和fastputmask
槽现在从不使用,必须始终设置为NULL
。这将不会改变行为。但是,如果用户数据类型应该设置其中一个,将会产生DeprecationWarning
。
(gh-14942)
np.ediff1d
与to_end
和to_begin
的类型转换行为
np.ediff1d
现在对其附加的to_end
和to_begin
参数使用了"same_kind"
转换规则。这确保了类型安全,除非输入数组的类型比to_begin
或to_end
小。在罕见的情况下,行为将比 1.16 和 1.17 中以前更严格。这是为了解决浮点 NaN 的问题。
(gh-14981)
将类似空数组对象转换为 NumPy 数组
具有len(obj) == 0
且实现“类似数组”的接口的对象,指的是实现了obj.__array__()
、obj.__array_interface__
、obj.__array_struct__
或 Python 缓冲区接口的对象,且也是序列(即 Pandas 对象),将在转换为数组时始终保持其正确的形状。如果此类对象先前的形状是(0, 1)
,它可能被转换为形状为(0,)
的数组(第一个 0 后面的所有维度被丢失)。
(gh-14995)
移除了multiarray.int_asbuffer
作为持续删除 Python 2 兼容性的一部分,multiarray.int_asbuffer
已被移除。在 Python 3 上,它会抛出一个NotImplementedError
,并且在内部未被使用。预期在 Python 3 中不会有此方法的下游用例。
(gh-15229)
numpy.distutils.compat
已被移除
此模块仅包含名为get_exception()
的函数,用法如下:
try:
...
except Exception:
e = get_exception()
它的目的是处理 Python 2.6 引入的语法变化,从except Exception, e:
到except Exception as e:
,意味着只有支持 Python 2.5 及更旧版本的代码库才是必需的。
(gh-15255)
issubdtype
不再将float
解释为np.floating
numpy.issubdtype
自 NumPy 1.14 以来一直有一个 FutureWarning,现在已过期。这意味着某些输入,其中第二个参数既不是数据类型也不是 NumPy 标量类型(如字符串或像int
或float
这样的 Python 类型),现在将与传入np.dtype(arg2).type
一致。这使结果与预期一致,并在某些先前返回 true 的情况下导致 false 结果。
(gh-15773)
将标量的round
输出更改为与 Python 一致
__round__
dunder 方法的输出和因此 Python 内置的round
已更改为一致,不带参数调用时将返回 Python int
。先前,如果传入np.dtype
,它会返回一个np.dtype
的标量。
(gh-15840)
numpy.ndarray
构造函数不再将strides=()
解释为strides=None
前者已更改为将numpy.ndarray.strides
设置为()
的预期含义,而后者继续自动选择步幅。
(gh-15882)
C 级字符串到日期时间的转换已更改
字符串的 C 级转换被简化。这一变化也修复了字符串到日期时间和时间间隔转换的行为(例如使用string_arr.astype("M8")
的 Python 转换,而以前的转换行为类似于string_arr.astype(np.int_).astype("M8")
)。这只影响使用低级 C-API 进行手动转换(而不是完整的数组转换)的代码的单个标量值,或者使用PyArray_GetCastFunc
,因此不应影响绝大部分用户。
(gh-16068)
SeedSequence
具有小种子将不再与生成发生冲突
小种子(小于2**96
)以前曾被隐式地 0 填充到 128 位,即内部熵池的大小。生成时,生成密钥在 0 填充之前被串联。由于第一个生成密钥是(0,)
,生成之前的小种子创建了与第一个生成SeedSequence
相同的状态。现在,种子在串联生成密钥之前被明确地 0 填充到内部池大小。生成的SeedSequences
将产生与上一个版本不同的结果。未生成的SeedSequences
将仍然产生相同的结果。
(gh-16551)
弃用
弃用对不规则输入的自动dtype=object
调用np.array([[1, [1, 2, 3]])
将根据NEP 34发出DeprecationWarning
。用户应该明确使用dtype=object
来避免警告。
(gh-15119)
向numpy.rec
的工厂函数传递shape=0
已被弃用
0
被视为特殊情况,并且在以下函数中别名为None
:
-
numpy.core.records.fromarrays
-
numpy.core.records.fromrecords
-
numpy.core.records.fromstring
-
numpy.core.records.fromfile
将来,0
将不再被特殊对待,将被视为与其他整数一样的数组长度。
(gh-15217)
弃用的可能未使用的 C-API 函数
下面的 C-API 函数可能未被使用,已被弃用:
-
PyArray_GetArrayParamsFromObject
-
PyUFunc_GenericFunction
-
PyUFunc_SetUsesArraysAsData
在大多数情况下,PyArray_GetArrayParamsFromObject
应该被转换为数组,而PyUFunc_GenericFunction
可以被PyObject_Call
替代(详见文档了解详情)。
(gh-15427)
转换某些类型到数据类型已经过时
标量类型的超类,如np.integer
,np.generic
,或np.inexact
在转换为数据类型(或在数据类型关键字参数中使用)时将会发出弃用警告。之所以这样做是因为np.integer
被转换为np.int_
,而它应该表示任何整数(例如,也包括int8
,int16
等)。例如,dtype=np.floating
目前与dtype=np.float64
相同,即使np.float32
也是np.floating
的子类。
(gh-15534)
废弃round
用于np.complexfloating
标量
复数标量的__round__
dunder 方法的输出以及因此 Python 内置的round
已经被废弃。这不影响np.round
。
(gh-15840)
numpy.ndarray.tostring()
已被废弃,推荐使用tobytes()
代替
~numpy.ndarray.tobytes
自 1.9 版以来就存在,但在此版中~numpy.ndarray.tostring
并没有发出警告。发出警告的变化使得 NumPy 与同名的内置array.array
方法保持一致。
(gh-15867)
废弃对不规则输入自动使用dtype=object
调用np.array([[1, [1, 2, 3]])
将会发出DeprecationWarning
,依照NEP 34。用户应该明确使用dtype=object
来避免这个警告。
(gh-15119)
传递shape=0
给numpy.rec
中的工厂函数已经被废弃
特殊情况下0
在以下函数中被别名为None
-
numpy.core.records.fromarrays
-
numpy.core.records.fromrecords
-
numpy.core.records.fromstring
-
numpy.core.records.fromfile
未来,0
将不再被特殊对待,将被当作其他整数一样对待。
(gh-15217)
废弃可能未被使用的 C-API 函数
以下的 C-API 函数可能没有被使用,已经被废弃:
-
PyArray_GetArrayParamsFromObject
-
PyUFunc_GenericFunction
-
PyUFunc_SetUsesArraysAsData
在大部分情况下PyArray_GetArrayParamsFromObject
应该被转换为数组,而PyUFunc_GenericFunction
可以被PyObject_Call
代替(详细信息请参阅文档)。
(gh-15427)
转换特定类型为 dtypes 已被废弃
标量类型的超类,比如np.integer
,np.generic
或者np.inexact
现在在转换为 dtype(或者在 dtype 关键字参数中使用)时将会产生废弃警告。这是因为np.integer
转换为了np.int_
,虽然它应该表示任何整数(比如int8
,int16
等)。例如,dtype=np.floating
目前与dtype=np.float64
完全相同,尽管np.float32
也是np.floating
的子类。
(gh-15534)
废弃round
用于np.complexfloating
标量
复数标量的__round__
dunder 方法的输出以及因此 Python 内置的round
已经被废弃。这不影响np.round
。
(gh-15840)
numpy.ndarray.tostring()
已被废弃,推荐使用tobytes()
代替
自 1.9 版本以来,~numpy.ndarray.tobytes
一直存在,但直到这个版本,~numpy.ndarray.tostring
没有发出任何警告。发出警告的改变使 NumPy 与相同名称的内置array.array
方法保持一致。
(gh-15867)
C API 变更
Better support for const
dimensions in API functions
以下函数现在接受一个常量数组npy_intp
:
-
PyArray_BroadcastToShape
-
PyArray_IntTupleFromIntp
-
PyArray_OverflowMultiplyList
以前,调用者必须将 const 修饰符去除才能调用这些函数。
(gh-15251)
Const qualify UFunc inner loops
UFuncGenericFunction
现在期望以指向 const dimension
和strides
的指针作为参数。这意味着内部循环可能不再修改dimension
或strides
。这一变化导致了incompatible-pointer-types
的警告,强迫用户要么忽略编译器的警告,要么在自己的循环签名中添加 const 修饰符。
(gh-15355)
Better support for const
dimensions in API functions
以下函数现在接受一个常量数组npy_intp
:
-
PyArray_BroadcastToShape
-
PyArray_IntTupleFromIntp
-
PyArray_OverflowMultiplyList
以前,调用者必须将 const 修饰符去除才能调用这些函数。
(gh-15251)
Const qualify UFunc inner loops
UFuncGenericFunction
现在期望以指向 const dimension
和strides
的指针作为参数。这意味着内部循环可能不再修改dimension
或strides
。这一变化导致了incompatible-pointer-types
的警告,强迫用户是否要忽略编译器的警告,或者在自己的循环签名中添加 const 修饰符。
(gh-15355)
新功能
numpy.frompyfunc
现在接受一个 identity 参数
这允许在生成的 ufunc 上设置numpy.ufunc.identity
属性,这意味着它可以用于空和多维调用numpy.ufunc.reduce
。
(gh-8255)
np.str_
标量现在支持缓冲区协议
np.str_
数组总是以 UCS4 格式存储,因此相应的标量现在通过缓冲区接口公开这一点,这意味着memoryview(np.str_('test'))
现在可以使用。
(gh-15385)
subok
选项用于numpy.copy
为numpy.copy
添加了一个新的关键字参数subok
,允许用户切换numpy.copy
相对于数组子类的行为。默认值为False
,与先前版本的 numpy 中numpy.copy
的行为一致。要创建一个保留数组子类的副本,调用np.copy(arr, subok=True)
。这个添加更好地说明了numpy.copy
的默认行为与numpy.ndarray.copy
方法有所不同,后者默认情况下尊重数组子类。
(gh-15685)
numpy.linalg.multi_dot
现在接受一个out
参数
out
可以用来避免通过numpy.linalg.multidot
计算的最终产品创建不必要的副本。
(gh-15715)
numpy.count_nonzero
的keepdims
参数
numpy.count_nonzero
添加了参数keepdims
。这个参数与numpy.sum
或numpy.mean
等缩减函数中的含义相同。
(gh-15870)
numpy.array_equal
的equal_nan
参数
numpy.array_equal
添加了关键字参数equal_nan
。equal_nan
是一个布尔值,用于切换在比较中是否将nan
值视为相等(默认值为False
)。这与numpy.isclose
和numpy.allclose
等相关函数中使用的 API 相匹配。
(gh-16128)
numpy.frompyfunc
现在接受一个 identity 参数
使得可以在生成的 ufunc 上设置numpy.ufunc.identity
特性,这意味着它可以用于空的和多维的numpy.ufunc.reduce
调用。
(gh-8255)
np.str_
标量现在支持缓冲协议
np.str_
数组始终以 UCS4 存储,因此相应的标量现在通过缓冲接口公开此特性,这意味着memoryview(np.str_('test'))
现在可以使用。
(gh-15385)
numpy.copy
的subok
选项
numpy.copy
添加了一个新的关键字参数subok
,允许用户切换numpy.copy
相对于数组子类的行为。默认值为False
,与先前版本的 numpy 中numpy.copy
的行为一致。要创建一个保留数组子类的副本,调用np.copy(arr, subok=True)
。这个添加更好地说明了numpy.copy
的默认行为与numpy.ndarray.copy
方法有所不同,后者默认情况下尊重数组子类。
(gh-15685)
numpy.linalg.multi_dot
现在接受一个out
参数
out
可以用来避免通过numpy.linalg.multidot
计算的最终产品创建不必要的副本。
(gh-15715)
对numpy.count_nonzero
添加了 keepdims
参数
添加了参数 keepdims
到 numpy.count_nonzero
。该参数的含义与在缩减函数中的含义相同,比如 numpy.sum
或 numpy.mean
。
(gh-15870)
numpy.array_equal
的 equal_nan
参数
numpy.array_equal
添加了关键字参数 equal_nan
。equal_nan
是一个布尔值,用于切换在比较中是否认为 nan
值相等(默认为 False
)。这与诸如 numpy.isclose
和 numpy.allclose
等相关函数中使用的 API 相匹配。
(gh-16128)
改进
改进 CPU 特性的检测
用更一般的函数 npy_cpu_init
和 npy_cpu_have
替换了npy_cpu_supports
,后者是一个用于测试 AVX 支持的 gcc 特定机制,并通过 NPY_CPU_HAVE
c-macro 以及 python-level __cpu_features__
字典来公开结果。
(gh-13421)
在 64 位平台上使用 64 位整数大小作为后备 lapack_lite
在后备 LAPACK 库中使用 64 位整数大小来处理线性代数的大数组,这在系统没有安装 LAPACK 时会发生。
(gh-15218)
当输入为 np.float64
时,使用 AVX512 内在来实现 np.exp
当输入为 np.float64
时,使用 AVX512 内在来实现 np.exp
,这可以将 np.float64
输入的 np.exp
的性能提高 5-7 倍。在 linux64 上,_multiarray_umath.so
模块已经增长了大约 63 KB。
(gh-15648)
禁用 madvise 大页的能力
在 Linux 上,NumPy 曾经添加了对 madvise 大页的支持,这可以改善非常大的数组的性能。不幸的是,在旧的内核版本上,这导致了性能回归,因此在 4.6 版本之前的内核上,默认情况下已禁用了对该支持。要覆盖默认设置,你可以使用环境变量:
代码语言:javascript复制NUMPY_MADVISE_HUGEPAGE=0
或将其设置为 1 以强制启用支持。请注意,这仅在操作系统设置为使用 madvise 透明大页时才有差异。
(gh-15769)
numpy.einsum
在下标列表中接受 NumPy int64
类型
当 numpy.einsum
以 NumPy int64
数组作为下标列表进行传递时,将不再抛出类型错误。
(gh-16080)
np.logaddexp2.identity
改变为 -inf
现在,ufunc ~numpy.logaddexp2
具有 -inf
的身份,允许其在空序列上调用。这与 ~numpy.logaddexp
的标识符匹配。
(gh-16102)
在 64 位平台上使用 64 位整数大小作为后备 lapack_lite
在 64 位平台上使用 64 位整数大小在回退 LAPACK 库中,当系统没有安装 LAPACK 时,允许其处理大数组的线性代数。
(gh-15218)
当输入为 np.float64
时,使用 AVX512 内在函数实现 np.exp
当输入为 np.float64
时,使用 AVX512 内在函数实现 np.exp
,可以比之前快 5-7 倍。在 linux64 下,_multiarray_umath.so
模块的大小增长了约 63KB。
(gh-15648)
禁用 madvise hugepages 的能力
在 Linux 上,NumPy 先前已添加了对 madvise hugepages 的支持,这可以改善非常大的数组的性能。不幸的是,在旧的内核版本上,这导致了性能回归,因此在内核版本低于 4.6 之前,默认情况下已禁用了对其的支持。要覆盖默认设置,您可以使用环境变量:
代码语言:javascript复制NUMPY_MADVISE_HUGEPAGE=0
或者将其设置为 1 以强制启用支持。请注意,只有在操作系统设置为使用 madvise 透明大页时,才会产生区别。
(gh-15769)
numpy.einsum
在下标列表中接受 NumPy int64
类型
当 numpy.einsum
以 NumPy int64
数组作为下标列表时,不再抛出类型错误。
(gh-16080)
np.logaddexp2.identity
更改为-inf
ufunc ~numpy.logaddexp2
现在具有-inf
的身份,允许在空序列上调用它。这与~numpy.logaddexp
的身份匹配。
(gh-16102)
变化
删除对__array__
的额外参数处理
从 NumPy 0.4 起,代码路径和测试就存在一个__array__(dtype=None, context=None)
的双参数变体。当调用 ufunc(op)
或 ufunc.reduce(op)
时,若存在 op.__array__
,则会激活它。然而,该变体没有文档说明,并且并不清楚其使用意图。已将其移除。
(gh-15118)
numpy.random._bit_generator
移至 numpy.random.bit_generator
为了将 numpy.random.BitGenerator
和 numpy.random.SeedSequence
暴露给 Cython,_bitgenerator
模块现在公开为 numpy.random.bit_generator
经由pxd
文件提供对随机分布的 Cython 访问
c_distributions.pxd
通过 Cython 提供了对许多随机分布背后的 C 函数的访问,使得使用和扩展它们变得更加方便。
(gh-15463)
修复了numpy.random.multivariate_normal
中的eigh
和cholesky
方法
以前,在传递 method='eigh'
或 method='cholesky'
时,numpy.random.multivariate_normal
产生了错误分布的样本。现在已经修复。
(gh-15872)
修复了MT19937.jumped
中的跳转实现
该修复改变了从跳动的 MT19937 生成器产生的流。它不影响直接种子化的RandomState
或MT19937
产生的流。
MT19937 的跳跃代码的翻译为反向循环顺序。MT19937.jumped
与松本真的 Horner 和滑动窗口跳跃方法的原始实现相匹配。
(gh-16153)
移除对__array__
的额外参数的处理
自 NumPy 0.4 以来,代码中一直存在着__array__(dtype=None, context=None)
的两个参数变体的代码路径和测试。当调用ufunc(op)
或ufunc.reduce(op)
时,如果op.__array__
存在,则会激活它。但是那个变体没有记录,并且不清楚其用途是什么。已将其移除。
(gh-15118)
numpy.random._bit_generator
移动到 numpy.random.bit_generator
为了将numpy.random.BitGenerator
和numpy.random.SeedSequence
暴露给 Cython,_bitgenerator
模块现在作为numpy.random.bit_generator
公开
Cython 通过pxd
文件提供对随机分布的访问
c_distributions.pxd
提供对 Cython 背后的许多随机分布的 C 函数的访问,使其方便使用和扩展。
(gh-15463)
修复了numpy.random.multivariate_normal
中的eigh
和cholesky
方法
以前,当传递method='eigh'
或method='cholesky'
时,numpy.random.multivariate_normal
生成了来自错误分布的样本。现在已修复。
(gh-15872)
修复了MT19937.jumped
中的跳跃实现
该修复改变了从跳动的 MT19937 生成器产生的流。它不影响直接种子化的RandomState
或MT19937
产生的流。
MT19937 的跳跃代码的翻译为反向循环顺序。MT19937.jumped
与松本真的 Horner 和滑动窗口跳跃方法的原始实现相匹配。
(gh-16153)
NumPy 1.18.5 版本发布说明
原文:
numpy.org/doc/1.26/release/1.18.5-notes.html
这是一个简短的版本,允许在 Python3.5 中使用 pickle protocol=5
。这是受到最近将 pickle5 回溯到 Python3.5 的启发。
此版本支持的 Python 版本为 3.5-3.8。下游开发人员应使用 Cython >= 0.29.15 来支持 Python 3.8,并且使用 OpenBLAS >= 3.7 来避免在 Skylake 架构上出现错误。
贡献者
共有 3 人为此版本做出了贡献。在其名字后面带有“ ”符号的人第一次为补丁做出了贡献。
- 查尔斯·哈里斯
- 马蒂·皮卡斯
- 庄思远
已合并的拉取请求
共有 2 个拉取请求被合并到此版本中。
- #16439:ENH:为 Python3.5 启用 pickle 协议 5 支持
- #16441:BUG:relpath 在 Windows 上无法处理不同驱动器
贡献者
共有 3 人为此版本做出了贡献。在其名字后面带有“ ”符号的人第一次为补丁做出了贡献。
- 查尔斯·哈里斯
- 马蒂·皮卡斯
- 庄思远
已合并的拉取请求
共有 2 个拉取请求被合并到此版本中。
- #16439:ENH:为 Python3.5 启用 pickle 协议 5 支持
- #16441:BUG:relpath 在 Windows 上无法处理不同驱动器
NumPy 1.18.4 Release Notes
原文:
numpy.org/doc/1.26/release/1.18.4-notes.html
这是 1.18.x 系列中最后一个计划发布的版本。它恢复了在 1.18.3 中引入的 bool("0")
行为,并修复了 Generator.integers
的一个 bug。当 numpy 导入失败时,错误消息中还包含到文档中新故障排除部分的链接。
本次发布支持的 Python 版本为 3.5-3.8。下游开发人员应使用 Cython >= 0.29.15 来支持 Python 3.8,并且使用 OpenBLAS >= 3.7 以避免在 Skylake 架构上出现错误。
贡献者
本次发布共有 4 个人参与了贡献。名字后带有“ ”符号的人第一次为该版本提交了贡献。
- Charles Harris
- Matti Picus
- Sebastian Berg
- Warren Weckesser
已合并的拉取请求
本次发布合并了 6 个拉取请求。
- #16055: BLD:添加 i686 支持到 1.18 构建
- #16090: BUG:random:
Generator.integers(2**32)
总是返回 0。 - #16091: BLD:修复 macOS 上 libgfortran 的路径问题
- #16109: REV:回滚了对类型转换的副作用更改
- #16114: BLD:在 Windows 上将 openblas 库放在本地目录中
- #16132: DOC:将导入错误“howto”更改为链接到新的故障排除…
贡献者
本次发布共有 4 个人参与了贡献。名字后带有“ ”符号的人第一次为该版本提交了贡献。
- Charles Harris
- Matti Picus
- Sebastian Berg
- Warren Weckesser
已合并的拉取请求
本次发布共合并了 6 个拉取请求。
- #16055: BLD:添加 i686 支持到 1.18 构建
- #16090: BUG:random:
Generator.integers(2**32)
总是返回 0。 - #16091: BLD:修复 macOS 上 libgfortran 的路径问题
- #16109: REV:回滚了对类型转换的副作用更改
- #16114: BLD:在 Windows 上将 openblas 库放在本地目录中
- #16132: DOC:将导入错误“howto”更改为链接到新的故障排除…
NumPy 1.18.3 版本说明
原文:
numpy.org/doc/1.26/release/1.18.3-notes.html
此版本包含了各种错误/退化性修复。
此版本支持的 Python 版本为 3.5-3.8。下游开发人员应使用 Cython >= 0.29.15 以支持 Python 3.8,并使用 OpenBLAS >= 3.7 以避免在 Skylake 架构上出错。
亮点
- 修复了
numpy.random.multivariate_normal
中 method=’eigh’ 和 method=’cholesky’ 方法。这些方法产生了错误分布的样本。
贡献者
此版本共有 6 人为其做出贡献。名字后面带有“ ”的人第一次为其贡献了补丁。
- Charles Harris
- Max Balandat
- @Mibu287
- Pan Jan
- Sebastian Berg
- @panpiort8
合并的拉取请求
此版本共合并了 5 个拉取请求。
- #15916:BUG:修复 numpy.random.multivariate_normal 的 eigh 和 cholesky 方法
- #15929:BUG, MAINT:移除字符串到数字的不正确特例…
- #15930:BUG:确保内存错误发生后数组处于有效状态…
- #15954:BUG:检查 _generator.multinomial 中的 pvals 是否为 1D。
- #16017:BUG:generator.dirichlet 中的 Alpha 参数必须是 1D
亮点
- 修复了
numpy.random.multivariate_normal
中 method=’eigh’ 和 method=’cholesky’ 方法。这些方法产生了错误分布的样本。
贡献者
此版本共有 6 人为其做出贡献。名字后面带有“ ”的人第一次为其贡献了补丁。
- Charles Harris
- Max Balandat
- @Mibu287
- Pan Jan
- Sebastian Berg
- @panpiort8
合并的拉取请求
此版本共合并了 5 个拉取请求。
- #15916:BUG:修复 numpy.random.multivariate_normal 的 eigh 和 cholesky 方法
- #15929:BUG, MAINT:移除字符串到数字的不正确特例…
- #15930:BUG:确保内存错误发生后数组处于有效状态…
- #15954:BUG:检查 _generator.multinomial 中的 pvals 是否为 1D。
- #16017:BUG:generator.dirichlet 中的 Alpha 参数必须是 1D
NumPy 1.18.2 发行说明
原文:
numpy.org/doc/1.26/release/1.18.2-notes.html
这个小版本包含了 numpy/random 中性能回退的修复以及一些 bug/维护更新。
此版本支持的 Python 版本为 3.5-3.8。下游开发人员应使用 Cython >= 0.29.15 来支持 Python 3.8,以及 OpenBLAS >= 3.7 以避免在 Skylake 架构上发生错误。
贡献者
共有 5 人对此版本进行了贡献。名字前带有“ ”号的人第一次贡献了补丁。
- Charles Harris
- Ganesh Kathiresan
- Matti Picus
- Sebastian Berg
- przemb
合并的拉取请求
共有 7 个拉取请求合并到此版本。
- #15675: TST:将 _no_tracing 移至 testing._private
- #15676: MAINT:某些随机函数中存在较大开销
- #15677: TST:不在 Azure Mac 测试中创建 gfortran 链接。
- #15679: BUG:在
ndarray.__contains__
中添加了遗漏的错误检查 - #15722: MAINT:使用基于列表的 API 调用子进程
- #15729: REL:为 1.18.2 版本做准备。
- #15734: BUG:修复 32 位系统上 nm 失败的逻辑错误
贡献者
共有 5 人对此版本进行了贡献。名字前带有“ ”号的人第一次贡献了补丁。
- Charles Harris
- Ganesh Kathiresan
- Matti Picus
- Sebastian Berg
- przemb
合并的拉取请求
共有 7 个拉取请求合并到此版本。
- #15675: TST:将 _no_tracing 移至 testing._private
- #15676: MAINT:某些随机函数中存在较大开销
- #15677: TST:不在 Azure Mac 测试中创建 gfortran 链接。
- #15679: BUG:在
ndarray.__contains__
中添加了遗漏的错误检查 - #15722: MAINT:使用基于列表的 API 调用子进程
- #15729: REL:为 1.18.2 版本做准备。
- #15734: BUG:修复 32 位系统上 nm 失败的逻辑错误
NumPy 1.18.1 发布说明
原文:
numpy.org/doc/1.26/release/1.18.1-notes.html
此版本修复了针对 NumPy 1.18.0 报告的错误。特别是造成广泛问题的两个缺陷是:
- Cython 随机扩展测试没有使用临时目录进行构建,导致权限违规。 现已修复。
- Numpy distutils 在所有 C 编译器运行中添加了 -std=c99,导致了行为改变和下游编译问题。 该标志现在仅在构建 numpy C 代码时应用。
本版本支持的 Python 版本是 3.5-3.8。 下游开发者应使用 Cython >= 0.29.14 来支持 Python 3.8,并使用 OpenBLAS >= 3.7 来避免在 Skylake 架构上发生错误。
贡献者
共有 7 人对本次发布作出了贡献。 姓名后带有“ ”表示他们首次为补丁作出贡献。
- Charles Harris
- Matti Picus
- Maxwell Aladago
- Pauli Virtanen
- Ralf Gommers
- Tyler Reddy
- Warren Weckesser
已处理的拉取请求
共有 13 个拉取请求合并到本次发布。
- #15158:MAINT:为 towncrier 更新 pavement.py。
- #15159:DOC: 添加移动模块到 1.18 发布说明
- #15161:MAINT:1.18.x 的轻微回退和更新
- #15176:TST:添加大整数数组的 assert_array_equal 测试
- #15184:BUG: 使用临时目录并检查 cython 测试的版本 (#15170)
- #15220:BUG: distutils: 修复 msvc gfortran openblas 处理角落情况。
- #15221:BUG: 移除 -std=c99 用于 c 编译 (#15194)
- #15222:MAINT:在 win32 上取消跳过测试
- #15223:TST:在 Travis 和 Azure 上添加 BLAS ILP64 运行
- #15245:MAINT:仅在需要时添加 –std=c99
- #15246:BUG: 函数梯度处理整数数组问题。
- #15247:MAINT: 在测试中不要使用私有 Python 函数。
- #15250:REL:准备 NumPy 1.18.1 发布。
贡献者
共有 7 人对本次发布作出了贡献。 姓名后带有“ ”表示他们首次为补丁作出贡献。
- Charles Harris
- Matti Picus
- Maxwell Aladago
- Pauli Virtanen
- Ralf Gommers
- Tyler Reddy
- Warren Weckesser
已处理的拉取请求
共有 13 个拉取请求合并到本次发布。
- #15158:MAINT:为 towncrier 更新 pavement.py。
- #15159:DOC: 添加移动模块到 1.18 发布说明
- #15161: MAINT, DOC: 1.18.x 的小修复和更新
- #15176: TST: 为大整数数组添加 assert_array_equal 测试
- #15184: BUG: 在 cython 测试中使用临时目录并检查版本(#15170)
- #15220: BUG: distutils: 修复 msvc gfortran openblas 处理的边缘情况
- #15221: BUG: 移除 C 编译的 -std=c99(#15194)
- #15222: MAINT: 在 win32 上取消跳过的测试
- #15223: TST: 在 Travis 和 Azure 中添加 BLAS ILP64 运行
- #15245: MAINT: 仅在需要时添加 –std=c99
- #15246: BUG: lib: 修复梯度对整数数组的处理
- #15247: MAINT: 在测试中不要使用私有的 Python 函数
- #15250: REL: 准备 NumPy 1.18.1 版本的发布
NumPy 1.18.0 发行说明
原文:
numpy.org/doc/1.26/release/1.18.0-notes.html
除了常规的错误修复外,此 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) -
expand_dims
在 1.13.0 版本中废弃的超出范围轴已经过期。(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
中 boolean 和空条件列表的弃用支持。(gh-14583) - 数组顺序只接受’C’,‘F’,‘A’和’K’。更宽容的选项在 NumPy 1.11 中已弃用。(gh-14596)
- np.linspace 参数
num
必须是整数。在 NumPy 1.12 中已弃用。(gh-14620) - 具有多个输出的 UFunc 必须使用元组作为
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
。 (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')
。添加所需的基础设施,以便在 datetime64
和 timedelta64
dtypes 上运行 np.isinf(a)
和 np.isnan(a)
。还为 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
以前对于项目大小为 0 的任何数据类型都会返回 True,但现在对于项目大小为 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
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
添加到了numpy.random
命名空间中 1.17.0。它原本是一个私有的 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
子命令的编译器调用。
(gh-14527) (gh-14518)
亮点
- 已定义和记录了
numpy.random
的 C-API。 - 与 64 位 BLAS 和 LAPACK 库进行链接的基本基础设施。
- 许多文档改进。
新函数
添加了多元超几何分布到numpy.random
已向类numpy.random.Generator
添加了方法multivariate_hypergeometric
。该方法从多元超几何概率分布中生成随机变量。(gh-13794)
添加了多元超几何分布到numpy.random
已向类numpy.random.Generator
添加了方法multivariate_hypergeometric
。该方法从多元超几何概率分布中生成随机变量。(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)
np.fromfile
和np.fromstring
在解析错误数据时会出错
在未来的 NumPy 版本中,当解析错误数据时,np.fromfile
和np.fromstring
将抛出错误。之前,部分甚至无效的数据会被悄无声息地返回。这个弃用还会影响 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
关键字参数。这结束了在 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
存在一个 bug,导致 8 位和 16 位整数类型出现偏倚抽样。修复了该 bug 后,输出流与先前版本有所不同。(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)
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
如果数组中存在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
存在一个 bug,导致 8 位和 16 位整数类型出现偏倚抽样。修复了该 bug 后,输出流与先前版本有所不同。(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)
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)
添加我们自己的*.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-to-C 类型映射的定制。 (gh-15113)
改进
相同大小的不同 C 数值类型具有独特的名称
在任何给定的平台上, 通过它们的 repr
,np.intc
、np.int_
和 np.longlong
三者以前都难以区分,尽管它们相应的 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)
np.random.multivariate_normal
的 method
关键字参数
现在 np.random.multivariate_normal
有一个可用的 method
关键字参数,可能的取值为 {'svd', 'eigh', 'cholesky'}
。 要使用它,写成 `np.random.multivariate_normal(…, 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
生成了错误的值
在确定是否使用 32 位路径还是完整 64 位路径时,引入于 1.17.0 的实现存在错误的检查,错误地将范围为 2**32
的高低范围的随机整数生成重定向到 64 位生成器。 (gh-14501)
为 numpy.fromfile
添加支持复数的功能
现在 numpy.fromfile
可以读取复数。 (gh-14730)
如果编译器命名为 gcc
,则添加 std=c99
GCC 在 5 版之前需要-std=c99
命令行参数。更新的编译器会自动打开 C99 模式。如果编译器名称中带有gcc
,则编译器设置代码将自动添加该代码。(gh-14771)
相同大小的不同 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)
当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)
当保存带有元数据的数组时发出警告
当通过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
在numpy.random
命名空间中在 1.17.0 版本中被加入。它原本是一个私有的 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
子命令的编译调用。
(gh-14527) (gh-14518)
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
子命令的编译器调用。
(gh-14527) (gh-14518)