NumPy 1.26 中文文档(五十五)

2024-07-26 09:58:54 浏览数 (2)

原文:numpy.org/doc/

NumPy 1.24.3 发布说明

原文:numpy.org/doc/1.26/release/1.24.3-notes.html

NumPy 1.24.3 是一个维护版本,修复了在 1.24.2 版本发布后发现的错误和回归问题。此版本支持的 Python 版本为 3.8-3.11。

贡献者

总共有 12 人为此版本做出了贡献。名字后带有“ ”的人第一次贡献了补丁。

  • Aleksei Nikiforov
  • Alexander Heger
  • Bas van Beek
  • Bob Eldering
  • Brock Mendel
  • Charles Harris
  • Kyle Sunden
  • Peter Hawkins
  • Rohit Goswami
  • Sebastian Berg
  • Warren Weckesser
  • dependabot[bot]

合并的拉取请求

总共有 17 个拉取请求被合并到此版本中。

  • #23206: BUG: 修复 f2py 字符串标量的问题(#23194)
  • #23207: BUG: datetime64/timedelta64 比较返回 NotImplemented
  • #23208: MAINT: 为 refguide 检查将 matplotlib 固定到版本 3.6.3
  • #23221: DOC: 修复文档中的 matplotlib 错误
  • #23226: CI: 确保在 gitpod 中初始化子模块
  • #23341: TYP: 用 reduceat 替换 ufunc 类型签名中的重复 reduce
  • #23342: TYP: 移除__init__.pyi中重复的 CLIP/WRAP/RAISE
  • #23343: TYP: 将 fftreq 和 rfftfreq 的d参数标记为可选…
  • #23344: TYP: 为 MaskedArray 的比较运算符添加类型注解
  • #23345: TYP: 移除msort的一些杂项类型检查导入
  • #23370: BUG: 确保like=分发函数只对like进行剥离
  • #23543: BUG: 修复在 s390x 上加载和存储大数组的问题
  • #23544: MAINT: 升级 larsoner/circleci-artifacts-redirector-action
  • #23634: BUG: 忽略掩码设置中的无效和溢出警告
  • #23635: BUG: 修复当order="A"order="K"时掩码数组的展平问题
  • #23636: MAINT: 更新 conftest 以适应更新的 hypothesis 版本
  • #23637: BUG: 修复解析 F77 风格字符串数组中的错误

贡献者

总共有 12 人为此版本做出了贡献。名字后带有“ ”的人第一次贡献了补丁。

  • Aleksei Nikiforov
  • Alexander Heger
  • Bas van Beek
  • Bob Eldering
  • Brock Mendel
  • Charles Harris
  • Kyle Sunden
  • Peter Hawkins
  • Rohit Goswami
  • Sebastian Berg
  • Warren Weckesser
  • dependabot[bot]

合并的拉取请求

总共有 17 个拉取请求被合并到此版本中。

  • #23206: BUG: 修复 f2py 字符串标量的问题 (#23194)
  • #23207: BUG: datetime64/timedelta64 比较返回 NotImplemented
  • #23208: MAINT: 将 matplotlib 固定到版本 3.6.3 以进行 refguide 检查
  • #23221: DOC: 修复文档中的 matplotlib 错误
  • #23226: CI: 确保在 gitpod 中初始化子模块
  • #23341: TYP: 用 reduceat 替换 ufunc 类型签名中的重复 reduce
  • #23342: TYP: 在 __init__.pyi 中移除重复的 CLIP/WRAP/RAISE
  • #23343: TYP: 将 fftfreq 和 rfftfreq 的 d 参数标记为可选…
  • #23344: TYP: 为 MaskedArray 的比较运算符添加类型注解
  • #23345: TYP: 移除一些零散的仅用于类型检查的msort导入
  • #23370: BUG: 确保 like= 分发函数仅对 like 进行剥离
  • #23543: BUG: 修复在 s390x 上加载和存储大数组的问题
  • #23544: MAINT: 升级 larsoner/circleci-artifacts-redirector-action
  • #23634: BUG: 忽略掩码设置中的无效和溢出警告
  • #23635: BUG: 修复掩码数组在 order="A"order="K" 时的展平问题
  • #23636: MAINT: 更新 conftest 以适配更新的 hypothesis 版本
  • #23637: BUG: 修复解析 F77 风格字符串数组的 bug

NumPy 1.24.2 发布说明

原文:numpy.org/doc/1.26/release/1.24.2-notes.html

NumPy 1.24.2 是一个维护版本,修复了在 1.24.1 发布后发现的错误和回归问题。本次发布支持的 Python 版本为 3.8-3.11。

贡献者

本次发布共有 14 位贡献者。名字后带有“ ”的人第一次贡献了补丁。

  • 巴斯·范·贝克
  • 查尔斯·哈里斯
  • Khem Raj
  • 马克·哈尔福什
  • 马蒂·皮库斯
  • Panagiotis Zestanakis
  • 彼得·霍金斯
  • 普拉迪普塔·戈什
  • 罗斯·巴诺夫斯基
  • 赛义德·阿德尔
  • 塞巴斯蒂安·伯格
  • Syam Gadde
  • dmbelov
  • pkubaj

合并的拉取请求

本次发布共合并了 17 个拉取请求。

  • #22965: 维护:将 python 3.11-dev 更新为 3.11。
  • #22966: 文档:移除悬空的弃用警告
  • #22967: 增强:在 FreeBSD/powerpc64* 上检测 CPU 特性
  • #22968: 错误:np.loadtxt 无法加载带引号字段分隔的文本文件…
  • #22969: 测试:添加 fixture 以避免测试顺序随机化问题。
  • #22970: 错误:修复违反只读标志的填充。 (#22959)
  • #22971: 维护:为缺失的标量 AttributeError 添加额外信息
  • #22972: 维护:将 scipy arm64 助手的导出移入主模块
  • #22976: 错误,SIMD:修复 arm64/clang 上 sin/cos 的虚假无效异常
  • #22989: 错误:确保 sin、cos 和 arctan2 中的循环顺序正确
  • #23030: 文档:为 strict 参数中的版本添加信息…
  • #23031: 错误:在大多数编译器上使用 _Alignof 而不是 offsetof()
  • #23147: 错误:修复 npyv__trunc_s32_f32 (VXE)
  • #23148: 错误:修复整数/浮点标量提升
  • #23149: 错误:添加丢失的 <type_traits> 头文件。
  • #23150: 类型,维护:为 npt.ArrayLike 添加缺失的显式 Any 参数…
  • #23161: 构建:移除 npy_nextafter 的多余定义 [wheel 构建]

贡献者

本次发布共有 14 位贡献者。名字后带有“ ”的人第一次贡献了补丁。

  • 巴斯·范·贝克
  • 查尔斯·哈里斯
  • Khem Raj
  • 马克·哈尔福什
  • 马蒂·皮库斯
  • Panagiotis Zestanakis
  • 彼得·霍金斯
  • 普拉迪普塔·戈什
  • 罗斯·巴诺夫斯基
  • 赛义德·阿德尔
  • 塞巴斯蒂安·伯格
  • Syam Gadde
  • dmbelov
  • pkubaj

合并的拉取请求

本次发布共合并了 17 个拉取请求。

  • #22965: MAINT: 将 python 3.11-dev 更新至 3.11。
  • #22966: DOC: 移除悬空的弃用警告
  • #22967: ENH: 在 FreeBSD/powerpc64* 上检测 CPU 特性
  • #22968: BUG: np.loadtxt 无法加载带引号字段分隔的文本文件…
  • #22969: TST: 添加 fixture 以避免测试顺序随机化的问题。
  • #22970: BUG: 修复违反只读标志的填充问题。 (#22959)
  • #22971: MAINT: 为缺失的标量 AttributeError 添加额外信息
  • #22972: MAINT: 将 scipy arm64 助手的导出移至主模块
  • #22976: BUG, SIMD: 修复 arm64/clang 上 sin/cos 的虚假无效异常
  • #22989: BUG: 确保 sin、cos 和 arctan2 中的循环顺序正确
  • #23030: DOC: 为 strict 参数添加版本添加信息…
  • #23031: BUG: 在大多数编译器上使用 _Alignof 而不是 offsetof()
  • #23147: BUG: 修复 npyv__trunc_s32_f32 (VXE) 的问题
  • #23148: BUG: 修复整数/浮点标量提升问题
  • #23149: BUG: 添加缺失的 <type_traits> 头文件。
  • #23150: TYP, MAINT: 为 npt.ArrayLike 添加一个遗漏的显式 Any 参数…
  • #23161: BLD: 移除 npy_nextafter 的多余定义 [wheel 构建]

NumPy 1.24.1 发布说明

原文:numpy.org/doc/1.26/release/1.24.1-notes.html

NumPy 1.24.1 是一个维护版本,修复了在 1.24.0 发布后发现的错误和回归。此版本支持的 Python 版本为 3.8-3.11。

贡献者

总共有 12 人为此版本做出了贡献。名字后带有“ ”符号的人第一次贡献了补丁。

  • Andrew Nelson
  • Ben Greiner
  • Charles Harris
  • Clément Robert
  • Matteo Raso
  • Matti Picus
  • Melissa Weber Mendonça
  • Miles Cranmer
  • Ralf Gommers
  • Rohit Goswami
  • Sayed Adel
  • Sebastian Berg

合并的拉取请求

总共有 18 个拉取请求被合并到此版本中。

  • #22820: BLD: 在 setup.py 中为更新的 setuptools 添加解决方法
  • #22830: BLD: CIRRUS_TAG redux
  • #22831: DOC: 修��1.23 版本中的一些拼写错误
  • #22832: BUG: 使用 pytest-leaks 发现的引用计数错误
  • #22834: BUG, SIMD: 修复多个 ufunc 中遇到的无效值
  • #22837: TST: 忽略更多的 np.distutils.log 导入
  • #22839: BUG: 不要在 np.ma.masked_invalid 中使用 getdata()
  • #22847: BUG: 确保以分隔符结尾的行的行为正确
  • #22848: BUG, SIMD: 修复布尔比较的位掩码
  • #22857: BLD: 帮助 raspian arm clang 13 解决 __builtin_mul_overflow 问题
  • #22858: API: 确保对 masked_invalid 返回完整掩码
  • #22866: BUG: 多项式现在可以正确复制(#22669)
  • #22867: BUG, SIMD: 修复 ufunc 比较循环中的内存重叠
  • #22868: BUG: 强化对浮点警告的字符串转换
  • #22875: TST: 在随机输出测试中忽略 nan 警告
  • #22883: MAINT: 恢复 freebsd 所需的 npymath 实现
  • #22884: BUG: 修复 in1d 中混合整数数据类型的整数溢出 #22877
  • #22887: BUG: 使用charset_normalizer进行编码检查时使用整个文件。

贡献者

总共有 12 人为此版本做出了贡献。名字后带有“ ”符号的人第一次贡献了补丁。

  • Andrew Nelson
  • Ben Greiner
  • Charles Harris
  • Clément Robert
  • Matteo Raso
  • Matti Picus
  • Melissa Weber Mendonça
  • Miles Cranmer
  • Ralf Gommers
  • Rohit Goswami
  • Sayed Adel
  • Sebastian Berg

合并的拉取请求

总共有 18 个拉取请求被合并到此版本中。

  • #22820: BLD: 在 setup.py 中为更新的 setuptools 添加解决方法
  • #22830: BLD: CIRRUS_TAG redux
  • #22831: DOC: 修复 1.23 版本说明中的几处拼写错误
  • #22832: BUG: 使用 pytest-leaks 发现的引用计数错误
  • #22834: BUG, SIMD: 修复多个 ufunc 中遇到的无效值
  • #22837: TST: 忽略更多 np.distutils.log 导入
  • #22839: BUG: 不要在 np.ma.masked_invalid 中使用 getdata()
  • #22847: BUG: 确保以分隔符结尾的行的行为正确
  • #22848: BUG, SIMD: 修复布尔比较的位掩码
  • #22857: BLD: 帮助 raspian arm clang 13 解决 __builtin_mul_overflow 问题
  • #22858: API: 确保对 masked_invalid 返回完整掩码
  • #22866: BUG: 多项式现在可以正确复制(#22669)
  • #22867: BUG, SIMD: 修复 ufunc 比较循环中的内存重叠
  • #22868: BUG: 加强对浮点警告的字符串转换
  • #22875: TST: 在随机输出测试中忽略 nan 警告
  • #22883: MAINT: 恢复 freebsd 所需的 npymath 实现
  • #22884: BUG: 修复混合整数 dtype 在 in1d 中的整数溢出问题 #22877
  • #22887: BUG: 使用charset_normalizer进行编码检查时使用整个文件。

NumPy 1.24 发布说明

原文:numpy.org/doc/1.26/release/1.24.0-notes.html

NumPy 1.24.0 发布继续致力于改进 dtype 的处理和提升,增加执行速度,并澄清文档。由于提升和清理的变化,还有大量新的和已过时的弃用功能。这可以称为弃用版本。亮点包括

  • 许多新的弃用功能,请查看。
  • 许多已过时的弃用功能,
  • 新的 F2PY 功能和修复。
  • 新的“dtype”和“casting”关键字用于堆叠函数。

详细信息请参见下文,

本次发布支持 Python 版本 3.8-3.11。

弃用功能

弃用 fastCopyAndTranspose 和 PyArray_CopyAndTranspose

numpy.fastCopyAndTranspose函数已被弃用。直接使用相应的复制和转置方法:

代码语言:javascript复制
arr.T.copy() 

底层 C 函数PyArray_CopyAndTranspose也已从 NumPy C-API 中弃用。

(gh-22313)

超出范围的 Python 整数转换

尝试将 Python 整数转换为 NumPy 值现在将始终检查结果是否可以由 NumPy 表示。这意味着以下示例将来会失败,并现在会给出DeprecationWarning

代码语言:javascript复制
np.uint8(-1)
np.array([3000], dtype=np.int8) 

许多这些以前是成功的。这样的代码主要对带有负值的无符号整数有用,例如np.uint8(-1)给出np.iinfo(np.uint8).max

请注意,NumPy 整数之间的转换不受影响,因此np.array(-1).astype(np.uint8)仍然有效,并使用 C 整数溢出逻辑。对于负值,也可以查看数组:np.array(-1, dtype=np.int8).view(np.uint8)。在某些情况下,使用np.iinfo(np.uint8).maxval % 2**8也可能效果很好。

在罕见情况下,输入数据可能混合负值和非常大的无符号值(即-12**63)。在这种情况下,不幸地需要在 Python 值上使用%,或者根据是否预期负值使用有符号或无符号转换。

(gh-22385)

弃用msort

numpy.msort函数已被弃用。请改用np.sort(a, axis=0)

(gh-22456)

np.str0等类似功能现已弃用

以 0 位大小结尾的标量类型别名:np.object0np.str0np.bytes0np.void0np.int0np.uint0以及np.bool8现已弃用,并最终将被移除。

(gh-22607)

已过时的弃用功能

  • np.histogramnp.histogram2dnp.histogramdd中的normed关键字参数已被移除。请改用density。如果normed是按位置传递的,则现在使用density。 (gh-21645)
  • 创建不规则数组现在将始终引发ValueError,除非传递了dtype=object。这包括非常深度嵌套的序列。 (gh-22004)
  • 不再支持 Visual Studio 2015 及更早版本。
  • 不再支持 Windows Interix POSIX 互操作层。 (gh-22139)
  • 不再支持 Cygwin < 3.3。 (gh-22159)
  • np.ma.MaskedArray的 mini()方法已被移除。请使用np.ma.MaskedArray.min()np.ma.minimum.reduce()
  • np.ma.minimumnp.ma.maximum的单参数形式已被移除。请改用np.ma.minimum.reduce()np.ma.maximum.reduce()。 (gh-22228)
  • 在 ufuncs 中将除了主要本机字节顺序之外的 dtype 实例传递给dtype=signature=现在会引发TypeError。我们建议传递字符串"int8"或标量类型np.int8,因为字节顺序、日期时间/时间增量单位等从不被强制执行。(在 NumPy 1.21 中最初被弃用。) (gh-22540)
  • 对比 ufuncs 的dtype=参数现在被正确应用。这意味着只有boolobject是有效值,且dtype=object被强制执行。 (gh-22541)
  • 别名np.objectnp.boolnp.floatnp.complexnp.strnp.int的弃用已过期(引入 NumPy 1.20)。其中一些现在除了引发错误外还会产生 FutureWarning,因为它们将来会映射到 NumPy 标量。 (gh-22607)

兼容性说明

array.fill(scalar)的行为可能会有轻微不同

numpy.ndarray.fill 在某些情况下可能会有轻微不同的行为,因为逻辑与项目赋值对齐:

代码语言:javascript复制
arr = np.array([1])  # with any dtype/value
arr.fill(scalar)
# is now identical to:
arr[0] = scalar 

以前的转换可能在使用无法表示为目标dtype的值或目标具有object dtype 时产生略有不同的答案。

(gh-20924)

子数组到对象的转换现在会复制

将包含子数组的 dtype 转换为对象将确保子数组的副本。以前会返回一个不安全的视图:

代码语言:javascript复制
arr = np.ones(3, dtype=[("f", "i", 3)])
subarray_fields = arr.astype(object)[0]
subarray = subarray_fields[0]  # "f" field

np.may_share_memory(subarray, arr) 

现在始终为 false。而以前对于特定转换是 true。

(gh-21925)

返回的数组尊重 dtype 关键字参数对象的唯一性

np.arrayasarraydtype关键字参数一起使用时,返回数组的 dtype 现在总是与调用者提供的 dtype 完全匹配。

在某些情况下,这种变化意味着返回的是视图而不是输入数组。以下是 64 位 Linux 上的一个示例,其中longlonglong具有相同的精度但不同的dtypes

代码语言:javascript复制
>>> arr = np.array([1, 2, 3], dtype="long")
>>> new_dtype = np.dtype("longlong")
>>> new = np.asarray(arr, dtype=new_dtype)
>>> new.dtype is new_dtype
True
>>> new is arr
False 

在更改之前,dtype不匹配是因为new is arrTrue

(gh-21995)

DLPack 导出引发 BufferError

当无法通过 DLPack 导出数组缓冲区时,现在始终引发 BufferError,之前可能引发 TypeErrorRuntimeError。这允许在首先尝试 DLPack 时回退到缓冲区协议或 __array_interface__

(gh-22542)

NumPy 构建不再在 GCC-6 上进行测试

Ubuntu 18.04 已在 GitHub actions 中弃用,Ubuntu 20.04 上不提供 GCC-6,因此不再测试使用该编译器的构建。我们仍然测试使用 GCC-7 和 GCC-8 进行构建。

(gh-22598)

新特性

多项式类添加了新属性 symbol

numpy.polynomial 包中的多项式类具有新的 symbol 属性,用于表示多项式的未知数。这可以用于在打印时更改变量的值:

代码语言:javascript复制
>>> P_y = np.polynomial.Polynomial([1, 0, -1], symbol="y")
>>> print(P_y)
1.0   0.0·y¹ - 1.0·y² 

注意多项式类仅支持 1D 多项式,因此在涉及具有不同符号的多项式的操作时,如果结果是多变量的,则不允许:

代码语言:javascript复制
>>> P = np.polynomial.Polynomial([1, -1])  # default symbol is "x"
>>> P_z = np.polynomial.Polynomial([1, 1], symbol="z")
>>> P * P_z
Traceback (most recent call last)
 ...
ValueError: Polynomial symbols differ 

符��可以是任何有效的 Python 标识符。默认为 symbol=x,与现有行为一致。

(gh-16154)

F2PY 支持 Fortran character 字符串

F2PY 现在支持包装 Fortran 函数:

  • 字符(例如 character x
  • 字符串数组(例如 character, dimension(n) :: x
  • 字符串(例如 character(len=10) x
  • 以及字符字符串数组(例如 character(len=10), dimension(n, m) :: x

参数,包括将 Python unicode 字符串作为 Fortran 字符串参数传递。

(gh-19388)

新函数 np.show_runtime

添加了一个新函数 numpy.show_runtime,用于显示机器的运行时信息,除了显示构建相关信息的 numpy.show_config

(gh-21468)

testing.assert_array_equalstrict 选项

testing.assert_array_equal 现在可用 strict 选项。设置 strict=True 将禁用标量的广播行为,并确保输入数组具有相同的数据类型。

(gh-21595)

np.unique 添加了新参数 equal_nan

np.unique 在 1.21 版本中更改,将所有 NaN 值视为相等并返回单个 NaN。设置 equal_nan=False 将恢复到 1.21 版本之前的行为,将 NaNs 视为唯一。默认为 True

(gh-21623)

numpy.stackcastingdtype 关键字参数

numpy.stack 现在可用 castingdtype 关键字参数。要使用它们,请写成 np.stack(..., dtype=None, casting='same_kind')

numpy.vstackcastingdtype 关键字参数

numpy.vstack 现在可用 castingdtype 关键字参数。要使用它们,请写成 np.vstack(..., dtype=None, casting='same_kind')

numpy.hstackcastingdtype关键字参数。

numpy.hstack现在可用castingdtype关键字参数。要使用它们,请写成np.hstack(..., dtype=None, casting='same_kind')

(gh-21627)

底层单例RandomState的位生成器可以更改。

在启动时,numpy.random模块中公开的单例RandomState实例使用MT19937位生成器进行初始化。新函数set_bit_generator允许用用户提供的位生成器替换默认位生成器。引入此函数是为了提供一种方法,使新代码中可以无缝集成高质量、现代位生成器,同时又可以使用由单例提供的随机变量生成函数的现有代码。配套函数get_bit_generator返回单例RandomState正在使用的当前位生成器。这是为了在需要时简化恢复原始随机性源。

生成可重现随机数的首选方法是在Generator实例中使用现代位生成器。函数default_rng简化了实例化:

代码语言:javascript复制
>>> rg = np.random.default_rng(3728973198)
>>> rg.random() 

然后可以与单例实例共享相同的位生成器,以便调用random模块中的函数将使用相同的位生成器:

代码语言:javascript复制
>>> orig_bit_gen = np.random.get_bit_generator()
>>> np.random.set_bit_generator(rg.bit_generator)
>>> np.random.normal() 

交换是永久的(直到被撤销),因此对random模块中的函数的任何调用都将使用新的位生成器。如果需要,原始位生成器可以恢复以使代码正确运行:

代码语言:javascript复制
>>> np.random.set_bit_generator(orig_bit_gen) 

(gh-21976)

np.void现在有一个dtype参数。

现在 NumPy 允许通过将dtype参数传递给np.void直接构造结构化空标量。

(gh-22316)

改进

F2PY 改进
  • 生成的扩展模块不再使用已弃用的 NumPy-C API。
  • 改进了f2py生成的异常消息。
  • 大量错误和flake8警告修复。
  • 在 C 表达式中,可以使用的各种 CPP 宏都以f2py_为前缀。例如,应该使用f2py_len(x)而不是len(x)
  • 引入了一个新的构造character(f2py_len=...),以支持从包装函数返回假定长度的字符字符串(例如character(len=*))。

引入了一个钩子,用于在读取所有输入文件后支持重写f2py内部数据结构。例如,这对于 SciPy 支持的 BC 是必需的,其中字符参数在C表达式中被视为字符字符串参数。

(gh-19388)

IBM zSystems 矢量扩展设施(SIMD)。

增加了对 zSystem(z13、z14、z15)的 SIMD 扩展的支持,通过通用内在函数接口。这种支持可以提高使用通用内在函数实现的所有 SIMD 内核的性能,包括以下操作:rint、floor、trunc、ceil、sqrt、absolute、square、reciprocal、tanh、sin、cos、equal、not_equal、greater、greater_equal、less、less_equal、maximum、minimum、fmax、fmin、argmax、argmin、add、subtract、multiply、divide。

(gh-20913)

NumPy 现在在转换中给出浮点错误

在大多数情况下,NumPy 以前在转换期间发生浮点警告或错误时不会给出警告。例如,转换如下:

代码语言:javascript复制
np.array([2e300]).astype(np.float32)  # overflow for float32
np.array([np.inf]).astype(np.int64) 

现在通常会给出浮点警告。这些警告应该警告浮点溢出发生。在将浮点值转换为整数时出现错误时,用户应该期望无效值警告。

用户可以使用 np.errstate 修改这些警告的行为。

浮点数到整数的转换警告可能与平台相关。例如:

代码语言:javascript复制
arr = np.full(100, fill_value=1000, dtype=np.float64)
arr.astype(np.int8) 

可能会给出等效于的结果(中间转换意味着不会给出警告):

代码语言:javascript复制
arr.astype(np.int64).astype(np.int8) 

可能返回未定义的结果,并设置警告:

代码语言:javascript复制
RuntimeWarning: invalid value encountered in cast 

具体行为取决于 C99 标准及其在软件和硬件中的实现。

(gh-21437)

F2PY 支持 value 属性

Fortran 标准要求使用 value 属性声明的变量必须按值传递而不是按引用传递。F2PY 现在正确支持这种用法模式。因此,Fortran 代码中的 integer, intent(in), value :: x 将生成正确的包装器。

(gh-21807)

增加了对第三方 BitGenerators 的 pickle 支持

位生成器的 pickle 格式已扩展,允许每个位生成器在 pickling 期间提供自己的构造函数。NumPy 的早期版本仅支持使用 NumPy 提供的核心一组位生成器创建的 Generator 实例的 unpickling。尝试 unpickle 使用第三方位生成器的 Generator 将失败,因为在 unpickling 期间使用的构造函数仅知道 NumPy 中包含的位生成器。

(gh-22014)

arange() 现在在 dtype=str 的情况下明确失败

以前,np.arange(n, dtype=str) 函数对 n=1n=2 有效,但对其他值的 n 会引发一个非特定的异常消息。现在,它会引发一个 TypeError,提示 arange 不支持字符串 dtype:

代码语言:javascript复制
>>> np.arange(2, dtype=str)
Traceback (most recent call last)
 ...
TypeError: arange() not supported for inputs with DType <class 'numpy.dtype[str_]'>. 

(gh-22055)

numpy.typing 协议现在可以在运行时进行检查

numpy.typing.ArrayLikenumpy.typing.DTypeLike 中使用的协议现在被正确标记为运行时可检查,使它们更容易用于运行时类型检查器。

(gh-22357)

性能改进和变化

更快的np.isinnp.in1d版本用于整数数组

np.in1d(被np.isin使用)现在可以在传递两个整数数组时切换到更快的算法(速度提高了超过 10 倍)。这通常会自动使用,但您可以使用kind="sort"kind="table"来分别强制使用旧方法或新方法。

(gh-12065)

更快的比较运算符

比较函数(numpy.equalnumpy.not_equalnumpy.lessnumpy.less_equalnumpy.greaternumpy.greater_equal)现在更快,因为它们现在使用通用内在函数进行矢量化。对于具有 SIMD 扩展 AVX512BW 的 CPU,整数、浮点和布尔数据类型���性能提升分别为 2.57 倍、1.65 倍和 19.15 倍(N=50000)。

(gh-21483)

变更

更好地报告整数除法溢出

标量和数组的整数除法溢出以前会提供RuntimeWarning,返回值未定义,导致在罕见情况下崩溃:

代码语言:javascript复制
>>> np.array([np.iinfo(np.int32).min]*10, dtype=np.int32) // np.int32(-1)
<stdin>:1: RuntimeWarning: divide by zero encountered in floor_divide
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32) 

整数除法溢出现在返回输入 dtype 的最小值并引发以下RuntimeWarning

代码语言:javascript复制
>>> np.array([np.iinfo(np.int32).min]*10, dtype=np.int32) // np.int32(-1)
<stdin>:1: RuntimeWarning: overflow encountered in floor_divide
array([-2147483648, -2147483648, -2147483648, -2147483648, -2147483648,
 -2147483648, -2147483648, -2147483648, -2147483648, -2147483648],
 dtype=int32) 

(gh-21506)

masked_invalid现在会就地修改掩码

当与copy=False一起使用时,numpy.ma.masked_invalid现在会就地修改输入的掩码数组。这使其行为与masked_where完全相同,并更好地匹配文档。

(gh-22046)

nditer/NpyIter允许分配所有操作数

通过 Python 中的np.nditer和 C 中的NpyIter可用的 NumPy 迭代器现在支持分配所有数组。在这种情况下,迭代器形状默认为()。必须提供操作数的 dtype,因为无法从其他输入中推断出“公共 dtype”。

(gh-22457)

弃用

弃用fastCopyAndTransposePyArray_CopyAndTranspose

numpy.fastCopyAndTranspose函数已被弃用。直接使用相应的复制和转置方法:

代码语言:javascript复制
arr.T.copy() 

底层的 C 函数PyArray_CopyAndTranspose也已从 NumPy C-API 中弃用。

(gh-22313)

Python 整数超出范围的转换

尝试将 Python 整数转换为 NumPy 值现在将始终检查结果是否可以由 NumPy 表示。这意味着以下示例将来将失败,并现在会给出DeprecationWarning

代码语言:javascript复制
np.uint8(-1)
np.array([3000], dtype=np.int8) 

许多这样的操作以前是成功的。这些代码主要用于具有负值的无符号整数,例如np.uint8(-1)给出np.iinfo(np.uint8).max

注意,NumPy 整数之间的转换不受影响,因此np.array(-1).astype(np.uint8)仍然有效,并使用 C 整数溢出逻辑。对于负值,也可以通过查看数组来实现:np.array(-1, dtype=np.int8).view(np.uint8)。在某些情况下,使用np.iinfo(np.uint8).maxval % 2**8也可能效果很好。

在罕见情况下,输入数据可能混合负值和非常大的无符号值(即 -12**63)。在这种情况下,不幸的是必须对 Python 值使用 %,或者根据是否预期负值使用有符号或无符号转换。

(gh-22385)

弃用 msort

numpy.msort 函数已被弃用。改用 np.sort(a, axis=0)

(gh-22456)

np.str0 和类似的现已被弃用

以 0 位大小结尾的标量类型别名:np.object0np.str0np.bytes0np.void0np.int0np.uint0 以及 np.bool8 现已被弃用,并最终将被移除。

(gh-22607)

弃用 fastCopyAndTranspose 和 PyArray_CopyAndTranspose

numpy.fastCopyAndTranspose 函数已被弃用。直接使用相应的复制和转置方法:

代码语言:javascript复制
arr.T.copy() 

底层 C 函数 PyArray_CopyAndTranspose 也已从 NumPy C-API 中弃用。

(gh-22313)

超出范围的 Python 整数转换

尝试将 Python 整数转换为 NumPy 值现在将始终检查结果是否可以由 NumPy 表示。这意味着以下示例将在未来失败,并现在会给出 DeprecationWarning

代码语言:javascript复制
np.uint8(-1)
np.array([3000], dtype=np.int8) 

其中许多在以前确实成功。这样的代码主要对带有负值的无符号整数有用,例如 np.uint8(-1) 给出 np.iinfo(np.uint8).max

请注意,NumPy 整数之间的转换不受影响,因此 np.array(-1).astype(np.uint8) 仍然有效,并使用 C 整数溢出逻辑。对于负值,也可以查看数组:np.array(-1, dtype=np.int8).view(np.uint8)。在某些情况下,使用 np.iinfo(np.uint8).maxval % 2**8 也可能很好地工作。

在罕见情况下,输入数据可能混合负值和非常大的无符号值(即 -12**63)。在这种情况下,不幸的是必须对 Python 值使用 %,或者根据是否预期负值使用有符号或无符号转换。

(gh-22385)

��用 msort

numpy.msort 函数已被弃用。改用 np.sort(a, axis=0)

(gh-22456)

np.str0 和类似的现已被弃用

以 0 位大小结尾的标量类型别名:np.object0np.str0np.bytes0np.void0np.int0np.uint0 以及 np.bool8 现已被弃用,并最终将被移除。

(gh-22607)

过期的弃用功能

  • np.histogramnp.histogram2dnp.histogramdd 中移除了 normed 关键字参数。改用 density。如果 normed 是按位置传递的,则现在使用 density。 (gh-21645)
  • 不规则数组创建现在除非传递 dtype=object,否则将始终引发 ValueError。这包括非常深度嵌套的序列。 (gh-22004)
  • 不再支持 Visual Studio 2015 及更早版本。
  • 不再支持 Windows Interix POSIX 互操作层。 (gh-22139)
  • 支持 Cygwin < 3.3 已被移除。 (gh-22159)
  • np.ma.MaskedArraymini() 方法已被移除。改用 np.ma.MaskedArray.min()np.ma.minimum.reduce()
  • np.ma.minimumnp.ma.maximum 的单参数形式已被移除。改用 np.ma.minimum.reduce()np.ma.maximum.reduce()。 (gh-22228)
  • 在 ufuncs 中将除了主要的(主要是本机字节顺序)规范 dtype 实例传递给 dtype=signature= 现在会引发 TypeError。我们建议传递字符串 "int8" 或标量类型 np.int8,因为字节顺序、日期时间/时间增量单位等从不被强制执行。(在 NumPy 1.21 中最初被弃用。) (gh-22540)
  • 对比较 ufuncs 的 dtype= 参数现在被正确应用。这意味着只有 boolobject 是有效值,且 dtype=object 被强制执行。 (gh-22541)
  • 对于别名 np.objectnp.boolnp.floatnp.complexnp.strnp.int 的弃用已过期(引入于 NumPy 1.20)。其中一些现在除了引发错误外还会产生 FutureWarning,因为它们将来会映射到 NumPy 标量。 (gh-22607)

兼容性说明

array.fill(scalar) 的行为可能略有不同

numpy.ndarray.fill 现在在某些情况下可能会有略微不同的行为,因为逻辑与项赋值对齐:

代码语言:javascript复制
arr = np.array([1])  # with any dtype/value
arr.fill(scalar)
# is now identical to:
arr[0] = scalar 

以前的强制转换可能在使用无法表示为目标 dtype 的值或目标具有 object dtype 时产生略有不同的答案。

(gh-20924)

子数组转为对象现在会复制

将包含子数组的 dtype 强制转换为对象将确保子数组的副本。之前返回的是不安全的视图:

代码语言:javascript复制
arr = np.ones(3, dtype=[("f", "i", 3)])
subarray_fields = arr.astype(object)[0]
subarray = subarray_fields[0]  # "f" field

np.may_share_memory(subarray, arr) 

现在始终为 false。而之前对于特定转换是 true。

(gh-21925)

返回的数组尊重 dtype kwarg 对象的唯一性

dtype 关键字参数与 np.arrayasarray 一起使用时,返回数组的 dtype 现在始终与调用者提供的 dtype 完全匹配。

在某些情况下,这个变化意味着返回的是视图而不是输入数组。以下是在 64 位 Linux 上的一个示例,其中 longlonglong 具有相同的精度但不同的 dtypes

代码语言:javascript复制
>>> arr = np.array([1, 2, 3], dtype="long")
>>> new_dtype = np.dtype("longlong")
>>> new = np.asarray(arr, dtype=new_dtype)
>>> new.dtype is new_dtype
True
>>> new is arr
False 

在更改之前,dtype不匹配是因为new is arrTrue

(gh-21995)

DLPack 导出引发BufferError

当数组缓冲区无法通过 DLPack 导出时,现在总是引发BufferError,而以前会引发TypeErrorRuntimeError。这允许在首次尝试 DLPack 时回退到缓冲区协议或__array_interface__

(gh-22542)

不再在 GCC-6 上测试 NumPy 构建

Ubuntu 18.04 已在 GitHub 操作中弃用,Ubuntu 20.04 上不可用 GCC-6,因此不再测试使用该编译器的构建。我们仍然测试使用 GCC-7 和 GCC-8 进行构建。

(gh-22598)

array.fill(scalar)的行为可能略有不同

numpy.ndarray.fill在某些情况下可能会因为逻辑与项目赋值对齐而略有不同:

代码语言:javascript复制
arr = np.array([1])  # with any dtype/value
arr.fill(scalar)
# is now identical to:
arr[0] = scalar 

以前进行转换时,当使用无法表示为目标dtype的值或目标具有object dtype 时,可能会产生略有不同的答案。

(gh-20924)

子数组转为对象现在会复制

将包含子数组的 dtype 转换为对象现在将确保子数组的副本。以前会返回一个不安全的视图:

代码语言:javascript复制
arr = np.ones(3, dtype=[("f", "i", 3)])
subarray_fields = arr.astype(object)[0]
subarray = subarray_fields[0]  # "f" field

np.may_share_memory(subarray, arr) 

现在总是为 false。而以前对于特定转换是 true。

(gh-21925)

返回的数组尊重 dtype kwarg 对象的唯一性

当使用np.arrayasarray时,如果使用了dtype关键字参数,则返回数组的 dtype 现在总是与调用者提供的 dtype 完全匹配。

在某些情况下,这种更改意味着返回的是视图而不是输入数组。以下是 64 位 Linux 上的一个示例,其中longlonglong具有相同的精度但不同的dtypes

代码语言:javascript复制
>>> arr = np.array([1, 2, 3], dtype="long")
>>> new_dtype = np.dtype("longlong")
>>> new = np.asarray(arr, dtype=new_dtype)
>>> new.dtype is new_dtype
True
>>> new is arr
False 

在更改之前,dtype不匹配是因为new is arrTrue

(gh-21995)

DLPack 导出引发BufferError

当数组缓冲区无法通过 DLPack 导出时,现在总是引发BufferError,而以前会引发TypeErrorRuntimeError。这允许在首次尝试 DLPack 时回退到缓冲区协议或__array_interface__

(gh-22542)

不再在 GCC-6 上测试 NumPy 构建

Ubuntu 18.04 已在 GitHub 操作中弃用,Ubuntu 20.04 上不可用 GCC-6,因此不再测试使用该编译器的构建。我们仍然测试使用 GCC-7 和 GCC-8 进行构建。

(gh-22598)

新特性

多项式类添加了新属性symbol

numpy.polynomial 包中的多项式类具有一个新的 symbol 属性,用于表示多项式的未知数。这可用于在打印时更改变量的值:

代码语言:javascript复制
>>> P_y = np.polynomial.Polynomial([1, 0, -1], symbol="y")
>>> print(P_y)
1.0   0.0·y¹ - 1.0·y² 

请注意,多项式类仅支持 1D 多项式,因此涉及具有不同符号的多项式的操作在结果为多变量时是不允许的:

代码语言:javascript复制
>>> P = np.polynomial.Polynomial([1, -1])  # default symbol is "x"
>>> P_z = np.polynomial.Polynomial([1, 1], symbol="z")
>>> P * P_z
Traceback (most recent call last)
 ...
ValueError: Polynomial symbols differ 

符号可以是任何有效的 Python 标识符。默认为 symbol=x,与现有行为一致。

(gh-16154)

F2PY 支持 Fortran character 字符串

F2PY 现在支持包装 Fortran 函数:

  • 字符(例如 character x
  • 字符数组(例如 character, dimension(n) :: x
  • 字符串(例如 character(len=10) x
  • 和字符字符串数组(例如 character(len=10), dimension(n, m) :: x

参数,包括将 Python Unicode 字符串作为 Fortran 字符串参数传递。

(gh-19388)

新函数 np.show_runtime

已添加一个新函数 numpy.show_runtime,用于显示机器的运行时信息,除了 numpy.show_config 显示构建相关信息。

(gh-21468)

testing.assert_array_equalstrict 选项

strict 选项现在可用于 testing.assert_array_equal。设置 strict=True 将禁用标量的广播行为,并确保输入数组具有相同的数据类型。

(gh-21595)

np.unique 添加了新参数 equal_nan

np.unique 在 1.21 版本中已更改,将所有 NaN 值视为相等并返回单个 NaN。设置 equal_nan=False 将恢复到 1.21 版本之前的行为,将 NaN 视为唯一。默认为 True

(gh-21623)

castingdtype 关键字参数用于 numpy.stack

castingdtype 关键字参数现在可用于 numpy.stack。要使用它们,请写成 np.stack(..., dtype=None, casting='same_kind')

castingdtype 关键字参数用于 numpy.vstack

castingdtype 关键字参数现在可用于 numpy.vstack。要使用它们,请写成 np.vstack(..., dtype=None, casting='same_kind')

castingdtype 关键字参数用于 numpy.hstack

castingdtype 关键字参数现在可用于 numpy.hstack。要使用它们,请写成 np.hstack(..., dtype=None, casting='same_kind')

(gh-21627)

可更改单例 RandomState 底层的比特生成器

numpy.random模块中公开的单例RandomState实例在启动时使用MT19937位生成器进行初始化。新函数set_bit_generator允许用用户提供的位生成器替换默认位生成器。引入此函数是为了提供一种方法,使新代码中可以无缝集成高质量、现代的位生成器,并与使用单例提供的随机变量生成函数的现有代码进行整合。伴随函数get_bit_generator返回单例RandomState正在使用的当前位生成器。这是为了在需要时简化恢复原始随机性源的过程。

生成可复现随机数的首选方法是在Generator实例中使用现代位生成器。函数default_rng简化了实例化过程:

代码语言:javascript复制
>>> rg = np.random.default_rng(3728973198)
>>> rg.random() 

然后可以将相同的位生成器与单例实例共享,以便调用random模块中的函数将使用相同的位生成器:

代码语言:javascript复制
>>> orig_bit_gen = np.random.get_bit_generator()
>>> np.random.set_bit_generator(rg.bit_generator)
>>> np.random.normal() 

交换是永久的(直到被撤销),因此对random模块中的函数的任何调用都将使用新的位生成器。如果需要,原始位生成器可以恢复以使代码正确运行:

代码语言:javascript复制
>>> np.random.set_bit_generator(orig_bit_gen) 

(gh-21976)

np.void现在有一个dtype参数

NumPy 现在允许通过将dtype参数传递给np.void直接构造结构化空标量。

(gh-22316)

多项式类添加了新属性symbol

numpy.polynomial包中的多项式类具有一个新的symbol属性,用于表示多项式的未知数。这可用于在打印时更改变量的值:

代码语言:javascript复制
>>> P_y = np.polynomial.Polynomial([1, 0, -1], symbol="y")
>>> print(P_y)
1.0   0.0·y¹ - 1.0·y² 

请注意,多项式类仅支持 1D 多项式,因此在涉及具有不同符号的多项式且结果为多变量时,不允许进行操作:

代码语言:javascript复制
>>> P = np.polynomial.Polynomial([1, -1])  # default symbol is "x"
>>> P_z = np.polynomial.Polynomial([1, 1], symbol="z")
>>> P * P_z
Traceback (most recent call last)
 ...
ValueError: Polynomial symbols differ 

符号可以是任何有效的 Python 标识符。默认为symbol=x,与现有行为一致。

(gh-16154)

F2PY 对 Fortran character 字符串的支持

F2PY 现在支持包装 Fortran 函数:

  • 字符(例如character x
  • 字符数组(例如character, dimension(n) :: x
  • 字符串(例如character(len=10) x
  • 和字符字符串数组(例如character(len=10), dimension(n, m) :: x

参数,包括将 Python Unicode 字符串作为 Fortran 字符串参数传递。

(gh-19388)

新函数np.show_runtime

添加了一个新函数numpy.show_runtime,用于显示机器的运行时信息,此外numpy.show_config显示了与构建相关的信息。

(gh-21468)

testing.assert_array_equalstrict选项

testing.assert_array_equal现在可用strict选项。设置strict=True将禁用标量的广播行为,并确保输入��组具有相同的数据类型。

(gh-21595)

np.unique添加了新参数equal_nan

np.unique在 1.21 版本中已更改,将所有NaN值视为相等并返回单个NaN。设置equal_nan=False将恢复到 1.21 版本之前的行为,将NaN视为唯一。默认为True

(gh-21623)

numpy.stackcastingdtype关键字参数

numpy.stack现在也可以使用castingdtype关键字参数。要使用它们,写成np.stack(..., dtype=None, casting='same_kind')

numpy.vstackcastingdtype关键字参数

numpy.vstackcastingdtype关键字参数现在也可用。要使用它们,写成np.vstack(..., dtype=None, casting='same_kind')

numpy.hstackcastingdtype关键字参数

现在numpy.hstack也可以使用castingdtype关键字参数。要使用它们,写成np.hstack(..., dtype=None, casting='same_kind')

(gh-21627)

单例RandomState的比特生成器可以更改

在启动时,numpy.random模块中公开的单例RandomState实例使用MT19937比特生成器进行初始化。新函数set_bit_generator允许将默认比特生成器替换为用户提供的比特生成器。此函数已被引入,以提供一种方法,允许在新代码中无缝集成高质量、现代比特生成器,并与使用单例提供的随机变量生成函数的现有代码进行整合。配套函数get_bit_generator返回单例RandomState正在使用的当前比特生成器。这是为了在需要时简化恢复原始随机性源。

生成可复现随机数的首选方法是在Generator实例中使用现代比特生成器。函数default_rng简化了实例化:

代码语言:javascript复制
>>> rg = np.random.default_rng(3728973198)
>>> rg.random() 

然后可以将相同的比特生成器与单例实例共享,以便调用random模块中的函数将使用相同的比特生成器:

代码语言:javascript复制
>>> orig_bit_gen = np.random.get_bit_generator()
>>> np.random.set_bit_generator(rg.bit_generator)
>>> np.random.normal() 

交换是永久的(直到被逆转),因此对random模块中的函数的任何调用都将使用新的比特生成器。如果需要代码正确运行,原始状态可以恢复:

代码语言:javascript复制
>>> np.random.set_bit_generator(orig_bit_gen) 

(gh-21976)

np.void现在有一个dtype参数

现在 NumPy 允许通过将dtype参数传递给np.void直接构造结构化空标量。

(gh-22316)

改进

F2PY 改进
  • 生成的扩展模块不再使用已弃用的 NumPy-C API
  • 改进了由f2py生成的异常消息
  • 大量错误和flake8警告修复
  • 在签名文件的 C 表达式中可以使用的各种 CPP 宏都以f2py_为前缀。例如,应该使用f2py_len(x)而不是len(x)
  • 引入了一个新的构造character(f2py_len=...)来支持从包装函数返回假定长度的字符串(例如character(len=*)

引入了一个钩子来支持在读取所有输入文件后重写f2py内部数据结构。例如,在 SciPy 支持的 BC 中,字符参数被视为C表达式中的字符串参数是必需的。

(gh-19388)

IBM zSystems 矢量扩展设施(SIMD)

增加了对 zSystem(z13、z14、z15)的 SIMD 扩展的支持,通过通用内在函数接口。这种支持导致使用通用内在函数实现的所有 SIMD 内核的性能提升,包括以下操作:rint、floor、trunc、ceil、sqrt、absolute、square、reciprocal、tanh、sin、cos、equal、not_equal、greater、greater_equal、less、less_equal、maximum、minimum、fmax、fmin、argmax、argmin、add、subtract、multiply、divide。

(gh-20913)

NumPy 现在在转换中给出浮点错误

在大多数情况下,NumPy 以前在进行转换时不会给出浮点警告或错误。例如,像这样的转换:

代码语言:javascript复制
np.array([2e300]).astype(np.float32)  # overflow for float32
np.array([np.inf]).astype(np.int64) 

现在通常会给出浮点警告。这些警告应该警告浮点溢出发生。在将浮点值转换为整数时出现错误时,用户应该期望无效值警告。

用户可以使用np.errstate修改这些警告的行为。

请注意,对于浮点到整数的转换,给出的确切警告可能取决于平台。例如:

代码语言:javascript复制
arr = np.full(100, fill_value=1000, dtype=np.float64)
arr.astype(np.int8) 

可能会给出等效于的结果(中间转换意味着没有警告):

代码语言:javascript复制
arr.astype(np.int64).astype(np.int8) 

可能返回未定义结果,并设置警告:

代码语言:javascript复制
RuntimeWarning: invalid value encountered in cast 

精确行为取决于 C99 标准及其在软件和硬件中的实现。

(gh-21437)

F2PY 支持 value 属性

Fortran 标准要求使用value属性声明的变量必须按值传递而不是按引用传递。F2PY 现在正确支持这种用法模式。因此,在 Fortran 代码中,integer, intent(in), value :: x将生成正确的包装器。

(gh-21807)

为第三方 BitGenerators 添加 pickle 支持

位生成器的 pickle 格式已扩展,以允许每个位生成器在 pickling 期间提供自己的构造函数。NumPy 的先前版本仅支持使用 NumPy 提供的核心一组位生成器之一创建的Generator实例的反序列化。尝试反序列化使用第三方位生成器的Generator将失败,因为在反序列化期间使用的构造函数仅知道 NumPy 中包含的位生成器。

(gh-22014)

arange()现在明确失败,dtype=str

以前,np.arange(n, dtype=str)函数对于n=1n=2有效,但对于其他值的n会引发一个非特定的异常消息。现在,它会引发一个TypeError,提示arange不支持字符串数据类型:

代码语言:javascript复制
>>> np.arange(2, dtype=str)
Traceback (most recent call last)
 ...
TypeError: arange() not supported for inputs with DType <class 'numpy.dtype[str_]'>. 

(gh-22055)

numpy.typing协议现在可以在运行时检查

现在在numpy.typing.ArrayLikenumpy.typing.DTypeLike中使用的协议已经正确标记为运行时可检查,使其更容易用于运行时类型检查。

(gh-22357)

F2PY 改进
  • 生成的扩展模块不再使用已弃用的 NumPy-C API
  • 改进了f2py生成的异常消息
  • 大量的错误和flake8警告修复
  • 在签名文件的 C 表达式中可以使用的各种 CPP 宏都以f2py_为前缀。例如,应该使用f2py_len(x)而不是len(x)
  • 引入了一个新的构造character(f2py_len=...)来支持从包装函数返回假定长度的字符串(例如character(len=*))。

引入了一个钩子来支持在读取所有输入文件后重写f2py内部数据结构。例如,这对于 SciPy 支持的 BC 是必需的,其中字符参数在C表达式中被视为字符串参数。

(gh-19388)

IBM zSystems 矢量扩展设施(SIMD)

增加了对 zSystem(z13、z14、z15)的 SIMD 扩展的支持,通过通用内在函数接口。这种支持导致使用通用内在函数实现的所有 SIMD 内核的性能提升,包括以下操作:rint、floor、trunc、ceil、sqrt、absolute、square、reciprocal、tanh、sin、cos、equal、not_equal、greater、greater_equal、less、less_equal、maximum、minimum、fmax、fmin、argmax、argmin、add、subtract、multiply、divide。

(gh-20913)

NumPy 现在在转换中给出浮点错误

在大多数情况下,NumPy 以前在转换过程中发生浮点警告或错误时并不会给出警告。例如,转换如下:

代码语言:javascript复制
np.array([2e300]).astype(np.float32)  # overflow for float32
np.array([np.inf]).astype(np.int64) 

现在通常会给出浮点警告。这些警告应该警告浮点溢出发生。对于将浮点值转换为整数时出现的错误,用户应该期望无效值警告。

用户可以使用np.errstate修改这些警告的行为。

请注意,对于浮点到整数的转换,给出的确切警告可能取决于平台。例如:

代码语言:javascript复制
arr = np.full(100, fill_value=1000, dtype=np.float64)
arr.astype(np.int8) 

可能会给出等效于的结果(中间转换意味着不会给出警告):

代码语言:javascript复制
arr.astype(np.int64).astype(np.int8) 

可能返回未定义的结果,并设置警告:

代码语言:javascript复制
RuntimeWarning: invalid value encountered in cast 

精确的行为取决于 C99 标准及其在软件和硬件中的实现。

(gh-21437)

F2PY 支持值属性

Fortran 标准要求使用value属性声明的变量必须按值传递而不是按引用传递。F2PY 现在正确支持这种用法模式。因此,Fortran 代码中的integer, intent(in), value :: x将生成正确的包装器。

(gh-21807)

为第三方 BitGenerators 添加了 pickle 支持

位生成器的 pickle 格式已扩展,允许每个位生成器在 pickling 期间提供自己的构造函数。以前的 NumPy 版本只支持使用 NumPy 提供的核心一组位生成器创建的Generator实例进行 unpickling。尝试 unpickle 使用第三方位生成器的Generator将失败,因为在 unpickling 期间使用的构造函数只知道 NumPy 中包含的位生成器。

(gh-22014)

arange()现在明确不支持 dtype=str

以前,np.arange(n, dtype=str)函数对于n=1n=2有效,但对于其他值的n会引发一个非特定的异常消息。现在,它会引发一个TypeError,提示arange不支持字符串 dtype:

代码语言:javascript复制
>>> np.arange(2, dtype=str)
Traceback (most recent call last)
 ...
TypeError: arange() not supported for inputs with DType <class 'numpy.dtype[str_]'>. 

(gh-22055)

numpy.typing协议现在可以在运行时进行检查

numpy.typing.ArrayLikenumpy.typing.DTypeLike中使用的协议现在正确标记为运行时可检查,使其更容易用于运行时类型检查器。

(gh-22357)

性能改进和变化

更快的np.isinnp.in1d整数数组版本

np.in1d(被np.isin使用)现在可以在传递两个整数数组时切换到更快的算法(速度提高超过 10 倍)。这通常会自动使用,但您可以使用kind="sort"kind="table"来分别强制使用旧方法或新方法。

(gh-12065)

更快的比较运算符

比较函数(numpy.equalnumpy.not_equalnumpy.lessnumpy.less_equalnumpy.greaternumpy.greater_equal)现在更快,因为它们现在使用通用内在函数进行向量化。对于具有 SIMD 扩展 AVX512BW 的 CPU,整数、浮点和布尔数据类型的性能提升分别为 2.57 倍、1.65 倍和 19.15 倍(N=50000)。

(gh-21483)

更快的np.isinnp.in1d整数数组版本

np.in1d(被np.isin使用)现在可以在传递两个整数数组时切换到更快的算法(速度提高超过 10 倍)。这通常会自动使用,但您可以使用kind="sort"kind="table"来分别强制使用旧方法或新方法。

(gh-12065)

更快的比较运算符

比较函数(numpy.equalnumpy.not_equalnumpy.lessnumpy.less_equalnumpy.greaternumpy.greater_equal)现在更快,因为它们现在使用通用指令集进行向量化。对于具有 SIMD 扩展 AVX512BW 的 CPU,整数、浮点和布尔数据类型的性能提升分别为 2.57 倍、1.65 倍和 19.15 倍(N=50000)。

(gh-21483)

变更

更好地报告整数除法溢出

标量和数组的整数除法溢出以前会提供RuntimeWarning,返回值未定义,导致在罕见情况下崩溃:

代码语言:javascript复制
>>> np.array([np.iinfo(np.int32).min]*10, dtype=np.int32) // np.int32(-1)
<stdin>:1: RuntimeWarning: divide by zero encountered in floor_divide
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32) 

整数除法溢出现在返回输入 dtype 的最小值,并引发以下RuntimeWarning

代码语言:javascript复制
>>> np.array([np.iinfo(np.int32).min]*10, dtype=np.int32) // np.int32(-1)
<stdin>:1: RuntimeWarning: overflow encountered in floor_divide
array([-2147483648, -2147483648, -2147483648, -2147483648, -2147483648,
 -2147483648, -2147483648, -2147483648, -2147483648, -2147483648],
 dtype=int32) 

(gh-21506)

masked_invalid现在就地修改掩码

当使用copy=False时,numpy.ma.masked_invalid现在会就地修改输入的掩码数组。这使其表现与masked_where完全相同,并更好地匹配文档。

(gh-22046)

nditer/NpyIter允许分配所有操作数

NumPy 迭代器现在通过 Python 中的np.nditer和 C 中的NpyIter支持分配所有数组。在这种情况下,迭代器形状默认为()。操作数的 dtype 必须提供,因为无法从其他输入中推断出“公共 dtype”。

(gh-22457)

更好地报告整数除法溢出

标量和数组的整数除法溢出以前会提供RuntimeWarning,返回值未定义,导致在罕见情况下崩溃:

代码语言:javascript复制
>>> np.array([np.iinfo(np.int32).min]*10, dtype=np.int32) // np.int32(-1)
<stdin>:1: RuntimeWarning: divide by zero encountered in floor_divide
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32) 

整数除法溢出现在返回输入 dtype 的最小值,并引发以下RuntimeWarning

代码语言:javascript复制
>>> np.array([np.iinfo(np.int32).min]*10, dtype=np.int32) // np.int32(-1)
<stdin>:1: RuntimeWarning: overflow encountered in floor_divide
array([-2147483648, -2147483648, -2147483648, -2147483648, -2147483648,
 -2147483648, -2147483648, -2147483648, -2147483648, -2147483648],
 dtype=int32) 

(gh-21506)

masked_invalid现在就地修改掩码

当使用copy=False时,numpy.ma.masked_invalid现在会就地修改输入的掩码数组。这使其表现与masked_where完全相同,并更好地匹配文档。

(gh-22046)

nditer/NpyIter允许分配所有操作数

NumPy 迭代器现在通过 Python 中的np.nditer和 C 中的NpyIter支持分配所有数组。在这种情况下,迭代器形状默认为()。必须提供操作数的 dtype,因为无法从其他输入中推断出“公共 dtype”。

(gh-22457)

NumPy 1.23.5 发布说明

原文:numpy.org/doc/1.26/release/1.23.5-notes.html

NumPy 1.23.5 是一个维护版本,修复了在 1.23.4 版本发布后发现的错误,并保持了构建基础设施的最新状态。此版本支持的 Python 版本为 3.8-3.11。

贡献者

本次发布共有 7 位贡献者。名字后带有“ ”的人第一次为此版本贡献了补丁。

  • @DWesl
  • Aayush Agrawal
  • Adam Knapp
  • Charles Harris
  • Navpreet Singh
  • Sebastian Berg
  • Tania Allard

合并的拉取请求

本次发布共合并了 10 个拉取请求。

  • #22489: 测试,维护: 用 setup_method(也包括 teardown)替换大部分 setup
  • #22490: 维护,CI: 切换至 cygwin/cygwin-install-action@v2
  • #22494: 测试: 使 test_partial_iteration_cleanup 更健壮但要求泄漏…
  • #22592: 维护: 确保对大头文件大小的优雅处理
  • #22593: 类型: 数组标志文字的拼写对齐
  • #22594: 错误修复: 修复 random.logseries 的边界检查
  • #22595: 开发: 更新 GH actions 和 Gitpod 的 Dockerfile
  • #22596: CI: 仅在 actions/checkout 中获取
  • #22597: 错误修复: 在 gentype_reduce 中减少引用计数,如果分配了内存…
  • #22625: 错误修复: 在 Windows 上大数组中的 Histogramdd 出现问题

贡献者

本次发布共有 7 位贡献者。名字后带有“ ”的人第一次为此版本贡献了补丁。

  • @DWesl
  • Aayush Agrawal
  • Adam Knapp
  • Charles Harris
  • Navpreet Singh
  • Sebastian Berg
  • Tania Allard

合并的拉取请求

本次发布共合并了 10 个拉取请求。

  • #22489: 测试,维护: 用 setup_method(也包括 teardown)替换大部分 setup
  • #22490: 维护,CI: 切换至 cygwin/cygwin-install-action@v2
  • #22494: 测试: 使 test_partial_iteration_cleanup 更健壮但要求泄漏…
  • #22592: 维护: 确保对大头文件大小的优雅处理
  • #22593: 类型: 数组标志文字的拼写对齐
  • #22594: 错误修复: 修复 random.logseries 的边界检查
  • #22595: DEV: 为 Gitpod 更新 GH actions 和 Dockerfile
  • #22596: CI: 仅在 actions/checkout 中获取
  • #22597: BUG: 在 gentype_reduce 中减少引用计数,如果分配了内存…
  • #22625: BUG: 在 Windows 中,Histogramdd 在大数组上出现问题

NumPy 1.23.4 发布说明

原文:numpy.org/doc/1.26/release/1.23.4-notes.html

NumPy 1.23.4 是一个维护版本,修复了在 1.23.3 版本发布后发现的错误,并保持了构建基础设施的最新状态。主要改进包括修复一些注释边缘情况的问题,修复了长期存在的nested_iters内存泄漏问题,以及修复了对于非常大的数组的复杂向量点积问题。此版本支持的 Python 版本为 3.8-3.11。

注意,如果您使用 Python 3.10.7 进行测试,则 mypy 版本需要为 0.981 ,否则类型测试将失败。

贡献者

本次发布共有 8 人做出了贡献。名字后面带有“ ”符号的人第一次贡献了补丁。

  • Bas van Beek
  • Charles Harris
  • Matthew Barber
  • Matti Picus
  • Ralf Gommers
  • Ross Barnowski
  • Sebastian Berg
  • Sicheng Zeng

合并的拉取请求

本次发布共合并了 13 个拉取请求。

  • #22368: 错误修复:将__array_api_version__添加到numpy.array_api命名空间
  • #22370: 维护:更新 sde 工具包至 9.0,修复下载链接
  • #22382: 构建:在 Azure 上使用 macos-11 镜像,macos-1015 已弃用
  • #22383: 维护:随机数:从“使用 Cython 扩展”中删除get_info
  • #22384: 错误修复:修复具有超过 NPY_CBLAS_CHUNK 元素的复杂向量点积
  • #22387: 修订:再次放宽lookfor的导入尝试/异常
  • #22388: 类型,增强:将numpy.typing协议标记为运行时可检查
  • #22389: 类型,维护:将更多重载改为与 pyright 兼容
  • #22390: 测试,类型:将 mypy 升级至 0.981
  • #22391: 文档:更新分隔符参数描述。
  • #22392: 错误修复:修复 numpy.nested_iters 中的内存泄漏
  • #22413: 发布:为 NumPy 1.23.4 版本做准备。
  • #22424: 测试:修复 aarch64 轮子构建失败的问题。

贡献者

本次发布共有 8 人做出了贡献。名字后面带有“ ”符号的人第一次贡献了补丁。

  • Bas van Beek
  • Charles Harris
  • Matthew Barber
  • Matti Picus
  • Ralf Gommers
  • Ross Barnowski
  • Sebastian Berg
  • Sicheng Zeng

合并的拉取请求

本次发布共合并了 13 个拉取请求。

  • #22368: 错误修复:将__array_api_version__添加到numpy.array_api命名空间
  • #22370: 维护:更新 sde 工具包至 9.0,修复下载链接
  • #22382: 构建:在 Azure 上使用 macos-11 镜像,macos-1015 已弃用
  • #22383: MAINT: random: 从“使用 Cython 扩展”中删除get_info
  • #22384: BUG: 修复具有超过 NPY_CBLAS_CHUNK 元素的复数向量点积
  • #22387: REV: 再次放宽lookfor的导入尝试/异常
  • #22388: TYP,ENH: 将numpy.typing协议标记为运行时可检查
  • #22389: TYP,MAINT: 将更多重载改为与 pyright 兼容
  • #22390: TST,TYP: 将 mypy 升级至 0.981
  • #22391: DOC: 更新分隔符参数描述。
  • #22392: BUG: numpy.nested_iters中的内存泄漏
  • #22413: REL: 为 NumPy 1.23.4 版本做准备。
  • #22424: TST: 修复 aarch64 wheel 构建失败的问题。

NumPy 1.23.3 发布说明

原文:numpy.org/doc/1.26/release/1.23.3-notes.html

NumPy 1.23.3 是一个维护版本,修复了在 1.23.2 发布后发现的错误。这个版本没有主要主题,主要改进是针对一些下游构建和一些注释边缘情况。此版本支持的 Python 版本为 3.8-3.11。

请注意,我们将在 NumPy 1.23.4 发布时转移到 MacOS 11,目前使用的 10.15 版本将不再受到我们的构建基础设施支持。

贡献者

总共有 16 人为这个版本做出了贡献。名字后面带有“ ”的人第一次贡献了补丁。

  • Aaron Meurer
  • Bas van Beek
  • Charles Harris
  • Ganesh Kathiresan
  • Gavin Zhang
  • Iantra Solari
  • Jyn Spring 琴春
  • Matti Picus
  • Rafael Cardoso Fernandes Sousa
  • Rafael Sousa
  • Ralf Gommers
  • Rin Cat (鈴猫)
  • Saransh Chopra
  • Sayed Adel
  • Sebastian Berg
  • Serge Guelton

合并的拉取请求

总共有 14 个拉取请求被合并到这个版本中。

  • #22136: 构建:将 Python 3.11 wheels 添加到 aarch64 构建中
  • #22148: 维护:更新 setup.py 以支持 Python 3.11。
  • #22155: CI:测试 NumPy 构建兼容旧版本的 GCC(6, 7, 8)
  • #22156: 维护:支持 IBM i 系统
  • #22195: 修复:修复 circleci 构建
  • #22214: 修复:在共享头文件中公开堆排序算法
  • #22215: 修复:支持使用 libunwind 进行回溯
  • #22216: 维护:修复 f2py 中不正确的指针类型使用
  • #22220: 修复:将重载改为与 pyright 兼容
  • #22221: 测试,修复:使用 fork 上下文修复 MacOS savez 测试
  • #22222: 类型,修复:减少 C-based __class_getitem__ 中的参数验证
  • #22223: 测试:确保np.equal.reduce引发TypeError
  • #22224: 修复:修复 numpy.array_api.vecdot 的实现
  • #22230: 修复:更好地报告整数除法溢出(回溯)

贡献者

总共有 16 人为这个版本做出了贡献。名字后面带有“ ”的人第一次贡献了补丁。

  • Aaron Meurer
  • Bas van Beek
  • Charles Harris
  • Ganesh Kathiresan
  • Gavin Zhang
  • Iantra Solari
  • Jyn Spring 琴春
  • Matti Picus
  • Rafael Cardoso Fernandes Sousa
  • Rafael Sousa
  • Ralf Gommers
  • Rin Cat (鈴猫)
  • Saransh Chopra
  • Sayed Adel
  • Sebastian Berg
  • Serge Guelton

合并的拉取请求

总共有 14 个拉取请求被合并到这个版本中。

  • #22136: BLD: 将 Python 3.11 wheels 添加到 aarch64 构建中
  • #22148: MAINT: 为 Python 3.11 更新 setup.py。
  • #22155: CI: 对 NumPy 构建进行针对旧版本的 GCC(6, 7, 8)测试
  • #22156: MAINT: 支持 IBM i 系统
  • #22195: BUG: 修复 circleci 构建
  • #22214: BUG: 在共享头文件中公开堆排序算法
  • #22215: BUG: 支持使用 libunwind 进行回溯
  • #22216: MAINT: 修复 f2py 中不正确的指针类型使用
  • #22220: BUG: 更改重载以与 pyright 兼容。
  • #22221: TST,BUG: 使用 fork 上下文修复 MacOS savez 测试
  • #22222: TYP,BUG: 减少基于 C 的 __class_getitem__ 中的参数验证
  • #22223: TST: 确保 np.equal.reduce 引发 TypeError
  • #22224: BUG: 修复 numpy.array_api.vecdot 的实现
  • #22230: BUG: 更好地报告整数除法溢出(回溯)

NumPy 1.23.2 发布说明

原文:numpy.org/doc/1.26/release/1.23.2-notes.html

NumPy 1.23.2 是一个维护版本,修复了 1.23.1 发布后发现的错误。值得注意的特性包括:

  • Python 3.11 所需的类型更改
  • Python 3.11.0rc1 的 Wheels

本次发布支持的 Python 版本为 3.8-3.11。

贡献者

本次发布共有 9 人做出了贡献。名字后带有“ ”符号的人第一次贡献了一个补丁。

  • Alexander Grund
  • Bas van Beek
  • Charles Harris
  • Jon Cusick
  • Matti Picus
  • Michael Osthege
  • Pal Barta
  • Ross Barnowski
  • Sebastian Berg

合并的拉取请求

本次发布共有 15 个拉取请求被合并。

  • #22030: 增强:为nin=1通用函数添加__array_ufunc__类型支持
  • #22031: 维护,类型:修复np.angle的 dtype 重载
  • #22032: 维护:不让_GenericAlias包装底层类的…
  • #22033: 类型,维护:允许通过整数传递einsum子脚本…
  • #22034: 维护,类型:为np.generic的富比较添加对象重载
  • #22035: 维护,类型:允许squeezetranspose方法…
  • #22036: 错误修复:修复子数组到对象转换的所有权细节
  • #22037: 错误修复:使用Popen静默调用 f77 -v
  • #22038: 错误修复:在深拷贝期间避免空指针错误
  • #22039: 文档:为转换器可调用行为添加版本更改说明。
  • #22057: 维护:安静地上传 anaconda。
  • #22078: 增强:重新排列包含项以在系统安装之上进行测试…
  • #22106: 测试:修复 test_linear_interpolation_formula_symmetric
  • #22107: 错误修复:修复 test_loss_of_precision[complex256]的跳过条件
  • #22115: 构建:构建 python3.11.0rc1 wheels。

贡献者

本次发布共有 9 人做出了贡献。名字后带有“ ”符号的人第一次贡献了一个补丁。

  • Alexander Grund
  • Bas van Beek
  • Charles Harris
  • Jon Cusick
  • Matti Picus
  • Michael Osthege
  • Pal Barta
  • Ross Barnowski
  • Sebastian Berg

合并的拉取请求

本次发布共有 15 个拉取请求被合并。

  • #22030: 增强:为nin=1通用函数添加__array_ufunc__类型支持
  • #22031: 维护,类型:修复np.angle的 dtype 重载
  • #22032: 维护:不让_GenericAlias包装底层类的…
  • #22033: TYP,MAINT: 允许通过整数传递einsum下标…
  • #22034: MAINT,TYP: 为np.generic富比较添加对象重载
  • #22035: MAINT,TYP: 允许squeezetranspose方法…
  • #22036: BUG: 修复子数组到对象转换的所有权细节
  • #22037: BUG: 使用Popen静默调用 f77 -v
  • #22038: BUG: 避免在深拷贝期间出现 NULL 错误
  • #22039: DOC: 为转换器可调用行为添加 versionchanged。
  • #22057: MAINT: 减少 anaconda 上传的信息。
  • #22078: ENH: 重新排列包含内容,以便在系统安装的基础上进行测试…
  • #22106: TST: 修复 test_linear_interpolation_formula_symmetric
  • #22107: BUG: 修复 test_loss_of_precision[complex256]的跳过条件
  • #22115: BLD: 构建 python3.11.0rc1 版本的安装包。

0 人点赞