NumPy 1.26 中文文档(五十六)

2024-07-26 09:59:30 浏览数 (2)

原文:numpy.org/doc/

NumPy 1.23.1 发布说明

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

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

  • 修复了 float16 NaN 值的 searchsorted
  • 修复了在 Apple M1 上的编译问题
  • 修复了 Slycot 中 crackfortran 运算符支持中的 KeyError

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

贡献者

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

  • Charles Harris
  • Matthias Koeppe
  • Pranab Das
  • Rohit Goswami
  • Sebastian Berg
  • Serge Guelton
  • Srimukh Sripada

合并的拉取请求

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

  • #21866: BUG: 修复发现的 MachAr 错误(仍在 valgrind 中使用)
  • #21867: BUG: 在排序过程中正确处理 float16 的 NaN 值
  • #21868: BUG: 在np.average的归一化过程中使用keepdims
  • #21869: DOC: 提及np.loadtxtmax_rows行为的更改
  • #21870: BUG: 拒绝大小为 1 的非整数数组删除
  • #21949: BLD: 使 32 位 x86_64 构建中的 can_link_svml 返回 False
  • #21951: BUG: 重新排列 extern “C”以仅适用于函数声明…
  • #21952: BUG: 修复 crackfortran 运算符支持中的 KeyError

贡献者

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

  • Charles Harris
  • Matthias Koeppe
  • Pranab Das
  • Rohit Goswami
  • Sebastian Berg
  • Serge Guelton
  • Srimukh Sripada

合并的拉取请求

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

  • #21866: BUG: 修复发现的 MachAr 错误(仍在 valgrind 中使用)
  • #21867: BUG: 在排序过程中正确处理 float16 的 NaN 值
  • #21868: BUG: 在np.average的归一化过程中使用keepdims
  • #21869: DOC: 提及np.loadtxtmax_rows行为的更改
  • #21870: BUG: 拒绝大小为 1 的非整数数组删除
  • #21949: BLD: 使 32 位 x86_64 构建中的 can_link_svml 返回 False
  • #21951: BUG: 重新排列 extern “C”以仅适用于函数声明…
  • #21952: BUG: 修复 crackfortran 运算符支持中的 KeyError

NumPy 1.23.0 版本发布说明

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

NumPy 1.23.0 版本持续改进处理和提升数据类型(dtypes)的工作,提高执行速度,澄清文档,并废弃旧的弃用功能。亮点包括:

  • 在 C 中实现了 loadtxt,大大提高了其性能。
  • 在 Python 层面暴露 DLPack 以便进行简单的数据交换。
  • 改变了结构化数据类型的提升和比较方式。
  • 对 f2py 的改进。

详细信息如下,

新功能

  • 现在可以使用 numpy.ma.ndenumerate 作为 ndenumerate 的掩码数组专用版本。它提供了一个替代方案,跳过默认情况下的掩码��。 (gh-20020)
  • 添加了 numpy.from_dlpack 以便使用 DLPack 协议轻松交换数据。它接受实现了 __dlpack____dlpack_device__ 方法的 Python 对象,并返回一个 ndarray 对象,通常是输入对象数据的视图。 (gh-21145)

弃用功能

  • __array_finalize__ 设置为 None 已被弃用。现在必须是一个方法,并且可能需要在检查 None 或者 NumPy 版本足够新时调用 super().__array_finalize__(obj)。 (gh-20766)
  • 在许多情况下,使用 axis=32 (axis=np.MAXDIMS) 与 axis=None 具有相同的含义。这已被弃用,必须改用 axis=None。 (gh-20920)
  • 钩子函数 PyDataMem_SetEventHook 已被弃用,并且在 tool/allocation_tracking 中演示其用法已被移除。现在通过 tracemalloc 内置到 Python 中来跟踪分配。 (gh-20394)
  • numpy.distutils 已被弃用,因为 distutils 本身已被弃用。在 Python >= 3.12 的 NumPy 中将不再存在,将在 Python 3.12 发布后的 2 年内完全移除。更多详情,请参阅 numpy.distutils 的状态和迁移建议。 (gh-20875)
  • 当请求整数 dtype 但值格式为浮点数时,numpy.loadtxt 现在会发出 DeprecationWarning。 (gh-21663)

已过时的弃用功能

  • NpzFile.iteritems()NpzFile.iterkeys() 方法已被移除,作为继续移除 Python 2 兼容性的一部分。这结束了从 1.15 版本开始的弃用。 (gh-16830)
  • 移除了 alenasscalar 函数。 (gh-20414)
  • UPDATEIFCOPY数组标志已与枚举NPY_ARRAY_UPDATEIFCOPY一起被移除。相关的(已弃用的)PyArray_XDECREF_ERR也被移除。这些在 1.14 中已被弃用。它们被NPY_ARRAY_WRITEBACKIFCOPY取代,需要在数组被释放之前调用PyArray_ResolveWritebackIfCopy。 (gh-20589)
  • 在类似数组创建期间将引发异常。当对象在访问特殊属性__array____array_interface__时引发异常时,通常会忽略此异常。这种行为在 1.21 中已被弃用,现在将引发异常。 (gh-20835)
  • 不允许使用非元组值进行多维索引。以前,诸如arr[ind]的代码,其中ind = [[0, 1], [0, 1]]会产生FutureWarning,并被解释为多维索引(即arr[tuple(ind)])。现在,此示例被视为在单个维度上的数组索引(arr[array(ind)])。除元组之外的多维索引在 NumPy 1.15 中已被弃用。 (gh-21029)
  • 在 F 连续数组中更改为不同大小的 dtype 不再被允许。自 Numpy 1.11.0 起已被弃用。请参见下文对此更改影响的详细解释。 (gh-20722)

新特性

crackfortran 支持运算符和赋值重载

crackfortran解析器现在可以理解模块中的运算符和赋值定义。它们被添加到模块的body列表中,其中包含一个新键implementedby,列出了实现运算符或赋值的子例程或函数的名称。

(gh-15006)

f2py 支持从派生类型语句中读取访问类型属性

因此,不需要使用publicprivate语句来指定派生类型的访问属性。

(gh-15844)

genfromtxt中添加了新参数ndmin

此参数与numpy.loadtxt中的ndmin的行为相同。

(gh-20500)

np.loadtxt现在支持引号字符和单个转换函数

numpy.loadtxt现在支持额外的quotechar关键字参数,默认未设置。使用quotechar='"'将读取 Excel CSV 方言中使用的带引号字段。

此外,现在可以传递单个可调用对象而不是字典作为converters参数。

(gh-20580)

现在更改为不同大小的 dtype 只需要最后一个轴的连续性

以前,查看具有不同项大小的 dtype 的数组需要整个数组是 C 连续的。这种限制会不必要地强迫用户在能够更改 dtype 之前对非连续数组进行连续复制。

此更改不仅影响ndarray.view,还影响其他构造机制,包括不鼓励直接对ndarray.dtype进行赋值。

此更改取消了关于查看 F 连续数组的弃用,其他地方在发布说明中有描述。

(gh-20722)

F2PY 的确定性输出文件

对于 F77 输入,f2py将无条件生成modname-f2pywrappers.f,尽管这些可能为空。对于自由格式输入,modname-f2pywrappers.fmodname-f2pywrappers2.f90都将无条件生成,可能为空。这允许在cmakemeson等构建系统中编写通用输出规则。通过向f2py传递--skip-empty-wrappers可以恢复旧行为。通过 meson 使用详细使用说明。

(gh-21187)

averagekeepdims参数

将参数keepdims添加到函数numpy.averagenumpy.ma.average中。该参数的含义与numpy.sumnumpy.mean等缩减函数中的含义相同。

(gh-21485)

np.unique添加了新参数equal_nan

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

(gh-21623)

兼容性说明

1D np.linalg.norm保留浮点输入类型,即使是标量结果

以前,当ord参数不是明确列出的值之一时,例如ord=3时,这将提升为float64

代码语言:javascript复制
>>> f32 = np.float32([1, 2])
>>> np.linalg.norm(f32, 2).dtype
dtype('float32')
>>> np.linalg.norm(f32, 3)
dtype('float64')  # numpy 1.22
dtype('float32')  # numpy 1.23 

此更改仅影响float32float16向量,ord不是-Inf012Inf

(gh-17709)

结构化(void)dtype 提升和比较的更改

一般来说,NumPy 现在为结构化 dtype 定义了正确但略有限制的提升,通过提升每个字段的子类型而不是引发异常:

代码语言:javascript复制
>>> np.result_type(np.dtype("i,i"), np.dtype("i,d"))
dtype([('f0', '<i4'), ('f1', '<f8')]) 

对于匹配字段名称、顺序和标题的提升,强制执行,但忽略填充。涉及结构化 dtype 的提升现在始终确保所有字段的本机字节顺序(这可能会改变np.concatenate的结果)并确保结果将是“紧凑的”,即所有字段都按顺序连续排列并删除填充。有关更多详细信息,请参见结构比较和提升。

对齐结构的repr现在永远不会打印包括offsetsitemsize的长格式,除非结构包含align=True未保证的填充。

与上述提升逻辑的变化一致,转换安全性已经更新:

  • "equiv"强制匹配名称和标题。由于填充,允许项大小不同。
  • "safe"允许不匹配的字段名称和标题
  • 转换安全性受到每个包含字段的转换安全性的限制。
  • 字段的顺序用于决定每个单独字段的转换安全性。以前,字段名称被使用,只有在名称不匹配时才可能发生不安全的转换。

这里的主要重要变化是现在将名称不匹配视为“安全”转换。

(gh-19226)

NPY_RELAXED_STRIDES_CHECKING已被移除

NumPy 不再能够使用NPY_RELAXED_STRIDES_CHECKING=0进行编译。多年来,放松的步幅一直是默认设置,最初引入该选项是为了实现更平滑的过渡。

(gh-20220)

np.loadtxt已经接受了几处更改

修复了numpy.loadtxt的行计数。loadtxt会忽略文件中完全空行,但会将其计入max_rows。当使用max_rows并且文件包含空行时,这些行现在不会被计入。以前可能出现结果包含少于max_rows行的情况,即使有更多数据可供读取。如果需要旧的行为,可以使用itertools.islice

代码语言:javascript复制
import itertools
lines = itertools.islice(open("file"), 0, max_rows)
result = np.loadtxt(lines, ...) 

虽然通常更快且改进了很多,但numpy.loadtxt现在可能无法将某些字符串转换为以前成功读取的数字。这些情况中最重要的是:

  • 解析浮点值,如1.0转换为整数现在已经不推荐使用。
  • 解析十六进制浮点数,如0x3p3将失败
  • 以前接受_作为千位分隔符100_000。现在��导致错误。

如果您遇到这些限制,可以通过传递适当的converters=来解决所有问题。NumPy 现在支持传递单个转换器以用于所有列,以使操作更加方便。例如,converters=float.fromhex可以读取十六进制浮点数,converters=int可以读取100_000

此外,错误消息已经得到了一般改进。然而,这意味着错误类型可能会有所不同。特别是,当解析单个条目失败时,现在总是会引发ValueError

(gh-20580)

改进

ndarray.__array_finalize__现在可调用

这意味着子类现在可以使用super().__array_finalize__(obj)而不必担心ndarray是否是它们的超类。实际调用仍然是一个空操作。

(gh-20766)

添加对 VSX4/Power10 的支持

通过 VSX4/Power10 启用,Power ISA 3.1 中提供的新指令可用于加速一些 NumPy 操作,例如 floor_divide、modulo 等。

(gh-20821)

np.fromiter 现在接受对象和子数组

numpy.fromiter 函数现在支持对象和子数组的数据类型。请参阅函数文档以获取示例。

(gh-20993)

数学 C 库特征检测现在使用正确的签名

编译之前会进行检测阶段,以确定底层 libc 是否支持某些数学操作。以前,这段代码没有遵守正确的签名。修复这个问题可以为wasm-ld后端(用于 web assembly 编译)启用编译,并减少警告数量。

(gh-21154)

np.kron 现在保留子类信息

np.kron 现在在计算输入的 Kronecker 乘积时保留子类信息

代码语言:javascript复制
>>> x = ma.array([[1, 2], [3, 4]], mask=[[0, 1], [1, 0]])
>>> np.kron(x,x)
masked_array(
 data=[[1, --, --, --],
 [--, 4, --, --],
 [--, --, 4, --],
 [--, --, --, 16]],
 mask=[[False,  True,  True,  True],
 [ True, False,  True,  True],
 [ True,  True, False,  True],
 [ True,  True,  True, False]],
 fill_value=999999) 

警告

np.kron 输出现在遵循ufunc排序(multiply)以确定输出类类型

代码语言:javascript复制
>>> class myarr(np.ndarray):
>>>    __array_priority__ = -1
>>> a = np.ones([2, 2])
>>> ma = myarray(a.shape, a.dtype, a.data)
>>> type(np.kron(a, ma)) == np.ndarray
False # Before it was True
>>> type(np.kron(a, ma)) == myarr
True 

(gh-21262)

性能改进和变化

更快的np.loadtxt

numpy.loadtxt 现在通常比以前快得多,因为大部分现在是用 C 实现的。

(gh-20580)

更快的约简运算符

对于连续的基于整数的数组,约简操作如numpy.sumnumpy.prodnumpy.add.reducenumpy.logical_and.reduce现在快得多。

(gh-21001)

更快的np.where

numpy.where 在不可预测/随机输入数据上比以前快得多。

(gh-21130)

NumPy 标量上的操作更快

许多 NumPy 标量上的操作现在显着更快,尽管在某些情况下,稀有操作(例如使用 0-D 数组而不是标量)可能较慢。然而,即使有这些改进,希望为标量获得最佳性能的用户可能希望使用scalar.item()将已知的 NumPy 标量转换为 Python 标量。

(gh-21188)

更快的np.kron

numpy.kron 现在快了约 80%,因为乘积现在使用广播计算。

(gh-21354)

新函数

  • 现在可以使用numpy.ma.ndenumerate作为ndenumerate的掩码数组专用版本。它提供了一个替代方案,跳过默认情况下的掩码值。 (gh-20020)
  • 添加了numpy.from_dlpack,以便使用 DLPack 协议轻松交换数据。它接受实现__dlpack____dlpack_device__方法的 Python 对象,并返回一个 ndarray 对象,通常是输入对象数据的视图。 (gh-21145)

弃用

  • __array_finalize__设置为None已被弃用。现在必须是一个方法,并且可能需要在检查None后或者 NumPy 版本足够新时调用super().__array_finalize__(obj)。 (gh-20766)
  • 在许多情况下,使用axis=32axis=np.MAXDIMS)与axis=None具有相同的含义。这已被弃用,必须改用axis=None。 (gh-20920)
  • 钩子函数PyDataMem_SetEventHook已被弃用,并且已删除了在 tool/allocation_tracking 中使用它的演示。现在通过tracemalloc内置到 python 中来跟踪分配。 (gh-20394)
  • numpy.distutils已被弃用,因为distutils本身已被弃用。在 Python >= 3.12 的 NumPy 中将不再存在,并且将在 Python 3.12 发布后的 2 年内完全移除。更多详情,请参见 Status of numpy.distutils and migration advice。 (gh-20875)
  • 当请求整数dtype但值格式化为浮点数时,numpy.loadtxt现在将给出DeprecationWarning。 (gh-21663)

过期的弃用功能

  • NpzFile.iteritems()NpzFile.iterkeys()方法已被移除,作为继续移除 Python 2 兼容性的一部分。这标志着从 1.15 开始的弃用已经完成。 (gh-16830)
  • alenasscalar函数已被移除。 (gh-20414)
  • UPDATEIFCOPY数组标志已与枚举NPY_ARRAY_UPDATEIFCOPY一起被移除。相关的(已弃用的)PyArray_XDECREF_ERR也已被移除。这些在 1.14 中已被弃用。它们被NPY_ARRAY_WRITEBACKIFCOPY取代,需要在数组被释放之前调用PyArray_ResolveWritebackIfCopy。 (gh-20589)
  • 在类似数组创建期间将引发异常。当对象在访问特殊属性__array____array_interface__时引发异常时,通常会忽略此异常。这种行为在 1.21 中已被弃用,现在将引发异常。 (gh-20835)
  • 不允许使用非元组值进行多维索引。以前,像arr[ind]这样的代码,其中ind = [[0, 1], [0, 1]]产生了一个FutureWarning,并被解释为多维索引(即arr[tuple(ind)])。现在,此示例被视为在单个维度上的数组索引(arr[array(ind)])。在 NumPy 1.15 中,除元组外的任何多维索引都已被弃用。 (gh-21029)
  • 不再允许在 F 连续数组中更改为不同大小的 dtype。自 Numpy 1.11.0 起已弃用。请参见下文以了解此更改的影响的详细解释。 (gh-20722)

新功能

crackfortran 支持运算符和赋值重载

crackfortran解析器现在了解模块中的运算符和赋值定义。它们被添加到包含新键implementedby的模块的body列表中,该键列出了实现运算符或赋值的子例程或函数的名称。

(gh-15006)

f2py 支持从派生类型语句中读取访问类型属性

因此,不需要使用publicprivate语句来指定派生类型的访问属性。

(gh-15844)

genfromtxt中添加了新参数ndmin

此参数的行为与numpy.loadtxt中的ndmin相同。

(gh-20500)

np.loadtxt现在支持引号字符和单个转换函数

numpy.loadtxt现在支持额外的quotechar关键字参数,默认未设置。使用quotechar='"'将读取 Excel CSV 方言中使用的带引号的字段。

此外,现在可以传递单个可调用对象而不是字典给converters参数。

(gh-20580)

更改为不同大小的 dtype 现在只需要最后一个轴是连续的

以前,查看具有不同项大小的 dtype 的数组需要整个数组是 C 连续的。这种限制会不必要地强迫用户在能够更改 dtype 之前对非连续数组进行连续复制。

此更改不仅影响ndarray.view,还影响其他构造机制,包括不鼓励直接对ndarray.dtype进行赋值。

此更改取消了关于查看 F 连续数组的弃用,其他地方在发布说明中有描述。

(gh-20722)

F2PY 的确定性输出文件

对于 F77 输入,f2py将无条件生成modname-f2pywrappers.f,尽管这些可能为空。对于自由格式输入,modname-f2pywrappers.fmodname-f2pywrappers2.f90都将无条件生成,可能为空。这允许在cmakemeson等构建系统中编写通用输出规则。通过向f2py传递--skip-empty-wrappers可以恢复旧行为。通过 meson 使用详细使用说明。

(gh-21187)

averagekeepdims参数

参数keepdims已添加到函数numpy.averagenumpy.ma.average中。该参数的含义与numpy.sumnumpy.mean等缩减函数中的含义相同。

(gh-21485)

np.unique 添加了新参数 equal_nan

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

(gh-21623)

crackfortran 现在支持运算符和赋值重载

crackfortran 解析器现在理解模块中的运算符和赋值定义。它们被添加到包含新键 implementedby 的模块的 body 列表中,列出了实现运算符或赋值的子例程或函数的名称。

(gh-15006)

f2py 支持从派生类型语句中读取访问类型属性

因此,不需要使用 publicprivate 语句来指定派生类型的访问属性。

(gh-15844)

genfromtxt 添加了新参数 ndmin

该参数的行为与 numpy.loadtxt 中的 ndmin 相同。

(gh-20500)

np.loadtxt 现在支持引号字符和单个转换函数

numpy.loadtxt 现在支持额外的 quotechar 关键字参数,默认未设置。使用 quotechar='"' 将读取 Excel CSV 方言中使用的带引号的字段。

此外,现在可以传递单个可调用对象而不是字典作为 converters 参数。

(gh-20580)

更改为不同大小的 dtype 现在只需要最后一个轴是连续的

以前,查看具有不同项大小的 dtype 的数组需要整个数组是 C 连续的。这种限制会不必要地强迫用户在能够更改 dtype 之前对非连续数组进行连续复制。

此更改不仅影响 ndarray.view,还影响其他构造机制,包括不鼓励直接赋值给 ndarray.dtype

此更改终止了关于查看 F 连续数组的弃用,其他地方在发布说明中有描述。

(gh-20722)

F2PY 的确定性输出文件

对于 F77 输入,f2py 将无条件生成 modname-f2pywrappers.f,尽管这些可能为空。对于自由格式输入,modname-f2pywrappers.fmodname-f2pywrappers2.f90 都将无条件生成,并且可能为空。这允许在 cmakemeson 等构建系统中编写通用输出规则。通过向 f2py 传递 --skip-empty-wrappers 可恢复旧行为。通过 meson 使用 详细说明用法。

(gh-21187)

averagekeepdims 参数

函数 numpy.averagenumpy.ma.average 添加了参数 keepdims。该参数在 numpy.sumnumpy.mean 等缩减函数中具有相同的含义。

(gh-21485)

np.unique新增了一个名为equal_nan的参数

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

(gh-21623)

兼容性说明

1D np.linalg.norm保留浮点输入类型,即使是标量结果

以前,当ord参数不是明确列出的值之一时,这将提升为float64,例如ord=3

代码语言:javascript复制
>>> f32 = np.float32([1, 2])
>>> np.linalg.norm(f32, 2).dtype
dtype('float32')
>>> np.linalg.norm(f32, 3)
dtype('float64')  # numpy 1.22
dtype('float32')  # numpy 1.23 

此更改仅影响float32float16向量,ord不是-Inf012Inf时。

(gh-17709)

结构化(void)dtype 提升和比较的更改

一般来说,NumPy 现在通过提升每个字段的子类型而不是引发异常来定义结构化 dtype 的正确但略有限制的提升:

代码语言:javascript复制
>>> np.result_type(np.dtype("i,i"), np.dtype("i,d"))
dtype([('f0', '<i4'), ('f1', '<f8')]) 

对于匹配字段名称,顺序和标题的提升,但忽略填充。现在,涉及结构化 dtype 的提升总是确保所有字段的本机字节顺序(这可能会改变np.concatenate的结果)并确保结果将是“紧凑的”,即所有字段都按顺序连续排列并删除填充。有关更多详细信息,请参阅结构比较和提升。

对齐结构的repr现在永远不会打印包括offsetsitemsize的长格式,除非结构包含align=True不能保证的填充。

与上述提升逻辑的更改一致,强制转换的安全性已更新:

  • "equiv"强制匹配名称和标题。由于填充的原因,允许项大小不同。
  • "safe"允许字段名称和标题不匹配
  • 强制转换的安全性受到每个包含字段的强制转换安全性的限制。
  • 字段的顺序用于决定每个单独字段的强制转换安全性。以前,使用字段名称,只有在名称不匹配时才可能发生不安全的强制转换。

这里的主要重要变化是现在认为名称不匹配是“安全”的强制转换。

(gh-19226)

NPY_RELAXED_STRIDES_CHECKING已被移除

NumPy 现在不能再使用NPY_RELAXED_STRIDES_CHECKING=0进行编译。多年来,放松的步幅一直是默认设置,最初引入该选项是为了实现更平稳的过渡。

(gh-20220)

np.loadtxt已经接受了几处更改

numpy.loadtxt的行计数已修复。loadtxt会忽略文件中完全空行,但会将其计入max_rows。当使用max_rows并且文件包含空行时,这些行现在不会被计算。以前,可能导致结果包含少于max_rows行,即使有更多数据可供读取。如果需要旧的行为,可以使用itertools.islice

代码语言:javascript复制
import itertools
lines = itertools.islice(open("file"), 0, max_rows)
result = np.loadtxt(lines, ...) 

虽然通常更快且改进了很多,numpy.loadtxt现在可能无法将某些字符串转换为以前成功读取的数字。这种情况最重要的情况是:

  • 将浮点值(如1.0)解析为整数现在已被弃用。
  • 解析十六进制浮点数,如0x3p3,将失败
  • 以前接受_作为千位分隔符100_000。现在将导致错误。

如果您遇到这些限制,可以通过传递适当的converters=来解决所有问题。NumPy 现在支持传递单个转换器以用于所有列,使其更加方便。例如,converters=float.fromhex可以读取十六进制浮点数,而converters=int可以读取100_000

此外,错误消息已经得到了改进。但是,这意味着错误类型可能会有所不同。特别是,当解析单个条目失败时,现在总是会引发ValueError

(gh-20580)

1D np.linalg.norm保留浮点输入类型,即使是标量结果

以前,当ord参数不是明确列出的值之一时,例如ord=3,这将提升为float64

代码语言:javascript复制
>>> f32 = np.float32([1, 2])
>>> np.linalg.norm(f32, 2).dtype
dtype('float32')
>>> np.linalg.norm(f32, 3)
dtype('float64')  # numpy 1.22
dtype('float32')  # numpy 1.23 

此更改仅影响具有ord不是-Inf012Inffloat32float16向量。

(gh-17709)

结构化(void)dtype 提升和比较的更改

总的来说,NumPy 现在通过提升每个字段的子类型而不是引发异常来定义正确但略有限制的结构化 dtype 的提升:

代码语言:javascript复制
>>> np.result_type(np.dtype("i,i"), np.dtype("i,d"))
dtype([('f0', '<i4'), ('f1', '<f8')]) 

对于提升匹配字段名称、顺序和标题是强制的,但会忽略填充。涉及结构化 dtype 的提升现在始终确保所有字段的本机字节顺序(这可能会改变np.concatenate的结果)并确保结果将是“紧凑的”,即所有字段都按顺序连续排列并删除填充。有关更多详细信息,请参阅结构比较和提升。

对齐结构的repr现在永远不会打印包括offsetsitemsize的长形式,除非结构包含align=True未保证的填充。

与上述提升逻辑的变化一致,转换安全性已更新:

  • "equiv"强制匹配名称和标题。由于填充,允许项大小不同。
  • "safe"允许不匹配的字段名称和标题
  • 转换的安全性受到每个包含字段的转换安全性的限制。
  • 字段的顺序用于决定每个字段的强制转换安全性。以前,字段名称被用来判断,当名称不匹配时只有不安全的强制转换才可能发生。

这里的主要重要变化是现在认为名称不匹配是“安全”的强制转换。

(gh-19226)

NPY_RELAXED_STRIDES_CHECKING已被移除

NumPy 不再能使用NPY_RELAXED_STRIDES_CHECKING=0进行编译。多年来,宽松步幅一直是默认设置,该选项最初是为了实现更平稳的过渡。

(gh-20220)

np.loadtxt已经进行了几处更改

numpy.loadtxt的行计数已修复。loadtxt会忽略文件中完全空白的行,但会将其计入max_rows。当使用max_rows并且文件包含空白行时,这些行现在将不被计算。以前,可能出现结果包含少于max_rows行的情况,即使有更多数据可供读取。如果需要旧的行为,可以使用itertools.islice

代码语言:javascript复制
import itertools
lines = itertools.islice(open("file"), 0, max_rows)
result = np.loadtxt(lines, ...) 

虽然通常更快且改进了很多,但numpy.loadtxt现在可能无法将先前成功读取的某些字符串转换为数字。这些情况中最重要的是:

  • 将浮点值(如1.0)解析为整数现在已被弃用。
  • 解析十六进制浮点数,如0x3p3,将失败
  • 以前接受_作为千位分隔符100_000。现在将导致错误。

如果您遇到这些限制,可以通过传递适当的converters=来解决。NumPy 现在支持传递单个转换器以用于所有列,以使这更加方便。例如,converters=float.fromhex可以读取十六进制浮点数,而converters=int将能够读取100_000

此外,错误消息已经得到了一般性的改进。然而,这意味着错误类型可能会有所不同。特别是,当解析单个条目失败时,现在总是会引发ValueError

(gh-20580)

改进

ndarray.__array_finalize__现在可调用

这意味着子类现在可以使用super().__array_finalize__(obj)而不必担心ndarray是否是它们的超类。实际调用仍然是一个空操作。

(gh-20766)

增加对 VSX4/Power10 的支持

通过启用 VSX4/Power10,Power ISA 3.1 中可用的新指令可以用于加速一些 NumPy 操作,例如,floor_divide,modulo 等。

(gh-20821)

np.fromiter现在接受对象和子数组

numpy.fromiter函数现在支持对象和子数组数据类型。请参阅函数文档以获取示例。

(gh-20993)

数学 C 库特性检测现在使用正确的签名

编译之前会进行检测阶段,以确定底层的 libc 是否支持某些数学运算。之前的代码没有遵守正确的签名。修复这个问题可以使得wasm-ld后端(用于 Web 汇编编译)可以进行编译,并减少警告数量。

(gh-21154)

np.kron现在保留子类信息

np.kron现在在计算输入的 Kronecker 积时保留子类信息,比如掩码数组

代码语言:javascript复制
>>> x = ma.array([[1, 2], [3, 4]], mask=[[0, 1], [1, 0]])
>>> np.kron(x,x)
masked_array(
 data=[[1, --, --, --],
 [--, 4, --, --],
 [--, --, 4, --],
 [--, --, --, 16]],
 mask=[[False,  True,  True,  True],
 [ True, False,  True,  True],
 [ True,  True, False,  True],
 [ True,  True,  True, False]],
 fill_value=999999) 

警告

np.kron输出现在遵循ufunc排序(multiply)以确定输出类别类型

代码语言:javascript复制
>>> class myarr(np.ndarray):
>>>    __array_priority__ = -1
>>> a = np.ones([2, 2])
>>> ma = myarray(a.shape, a.dtype, a.data)
>>> type(np.kron(a, ma)) == np.ndarray
False # Before it was True
>>> type(np.kron(a, ma)) == myarr
True 

(gh-21262)

ndarray.__array_finalize__现在是可调用的

这意味着子类现在可以使用super().__array_finalize__(obj)而不必担心ndarray是否是它们的超类。实际调用仍然是一个空操作。

(gh-20766)

增加对 VSX4/Power10 的支持

通过 VSX4/Power10 启用,Power ISA 3.1 中可用的新指令可以用于加速一些 NumPy 操作,例如,floor_divide,modulo 等。

(gh-20821)

np.fromiter现在接受对象和子数组

numpy.fromiter函数现在支持对象和子数组数据类型。请查看函数文档以获取示例。

(gh-20993)

数学 C 库特性检测现在使用正确的签名

编译之前会进行检测阶段,以确定底层的 libc 是否支持某些数学运算。之前的代码没有遵守正确的签名。修复这个问题可以使得wasm-ld后端(用于 Web 汇编编译)可以进行编译,并减少警告数量。

(gh-21154)

np.kron现在保留子类信息

np.kron现在在计算输入的 Kronecker 积时保留子类信息,比如掩码数组

代码语言:javascript复制
>>> x = ma.array([[1, 2], [3, 4]], mask=[[0, 1], [1, 0]])
>>> np.kron(x,x)
masked_array(
 data=[[1, --, --, --],
 [--, 4, --, --],
 [--, --, 4, --],
 [--, --, --, 16]],
 mask=[[False,  True,  True,  True],
 [ True, False,  True,  True],
 [ True,  True, False,  True],
 [ True,  True,  True, False]],
 fill_value=999999) 

警告

np.kron输出现在遵循ufunc排序(multiply)以确定输出类别类型

代码语言:javascript复制
>>> class myarr(np.ndarray):
>>>    __array_priority__ = -1
>>> a = np.ones([2, 2])
>>> ma = myarray(a.shape, a.dtype, a.data)
>>> type(np.kron(a, ma)) == np.ndarray
False # Before it was True
>>> type(np.kron(a, ma)) == myarr
True 

(gh-21262)

性能改进和变更

更快的np.loadtxt

numpy.loadtxt现在通常比以前快得多,因为现在大部分是用 C 实现的。

(gh-20580)

更快的减少运算符

对于连续的基于整数的数组,减少运算如numpy.sumnumpy.prodnumpy.add.reducenumpy.logical_and.reduce现在快得多。

(gh-21001)

更快的np.where

numpy.where现在在不可预测/随机输入数据上比以前快得多。

(gh-21130)

NumPy 标量的操作更快了

许多对 NumPy 标量的操作现在显着更快,尽管在某些情况下,一些罕见的操作(例如使用 0-D 数组而不是标量)可能会更慢。然而,即使有了这些改进,希望为其标量获得最佳性能的用户,可能希望使用scalar.item()将已知的 NumPy 标量转换为 Python 标量。

(gh-21188)

更快的np.kron

numpy.kron现在快了约 80%,因为产品现在是使用广播计算的。

(gh-21354)

更快的np.loadtxt

numpy.loadtxt现在通常比以前快得多,因为现在大部分都是用 C 实现的。

(gh-20580)

更快的缩减运算符

对连续整数数组的缩减操作,如numpy.sumnumpy.prodnumpy.add.reducenumpy.logical_and.reduce,现在快得多。

(gh-21001)

更快的np.where

在不可预测/随机输入数据上,numpy.where现在比以前快得多。

(gh-21130)

更快的 NumPy 标量操作

许多对 NumPy 标量的操作现在显着更快,尽管在某些情况下,一些罕见的操作(例如使用 0-D 数组而不是标量)可能会更慢。然而,即使有了这些改进,希望为其标量获得最佳性能的用户,可能希望使用scalar.item()将已知的 NumPy 标量转换为 Python 标量。

(gh-21188)

更快的np.kron

numpy.kron现在快了约 80%,因为产品现在是使用广播计算的。

(gh-21354)

NumPy 1.22.4 发布说明

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

NumPy 1.22.4 是一个维护版本,修复了在 1.22.3 发布后发现的错误。此外,此版本的 wheels 使用了最近发布的 Cython 0.29.30 构建,这应该修复了与调试报告的问题。

此版本支持的 Python 版本为 3.8-3.10。请注意,Mac wheels 基于 OS X 10.15 而不是之前 NumPy 发布周期中使用的 10.9。

贡献者

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

  • Alexander Shadchin
  • Bas van Beek
  • Charles Harris
  • Hood Chatham
  • Jarrod Millman
  • John-Mark Gurney
  • Junyan Ou
  • Mariusz Felisiak
  • Ross Barnowski
  • Sebastian Berg
  • Serge Guelton
  • Stefan van der Walt

合并的拉取请求

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

  • #21191: 类型、错误:修复np.lib.stride_tricks在…下重新导出
  • #21192: 测试:将 mypy 从 0.931 升级到 0.940
  • #21243: 维护:明确重新导出numpy._typing中的类型
  • #21245: 维护:为 CI 文档构建指定 sphinx、numpydoc 版本
  • #21275: 错误:修复拼写错误
  • #21277: 增强、构建:修复 wasm 的数学特性检测
  • #21350: 维护:修复失败的 simd 和 cygwin 测试。
  • #21438: 维护:修复 Python 3.8 32 位 Windows 测试失败。
  • #21444: 错误:根据#21386 添加 linux 保护
  • #21445: 错误:允许旧数据类型再次转换为日期时间
  • #21446: 错误:使 frombuffer 中的 mmap 处理更安全
  • #21447: 错误:停止使用 Python 3.11 中已弃用的 PyBytesObject.ob_shash。
  • #21448: 增强:引入 numpy.core.setup_common.NPY_CXX_FLAGS
  • #21472: 错误:确保编译错误被正确引发
  • #21473: 错误:修复分段错误
  • #21474: 维护:更新文档要求
  • #21475: 维护:在 clang 上使用no_sanitize("alignment")标记npy_memchr
  • #21512: 文档:建议 - 使文档首页卡片更相似…
  • #21525: 维护:更新 Cython 版本至 0.29.30。
  • #21536: 错误:修复构建配置期间的 GCC 错误
  • #21541: REL:为 NumPy 1.22.4 版本发布做准备。
  • #21547: 维护:跳过在 PyPy 上失败的测试。

贡献者

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

  • 亚历山大·沙德钦
  • 巴斯·范贝克
  • 查尔斯·哈里斯
  • 胡德·查塔姆
  • 贾罗德·米尔曼
  • 约翰-马克·格尼
  • 吴俊岩
  • 马里乌什·费利西亚克
  • 罗斯·巴诺夫斯基
  • 塞巴斯蒂安·伯格
  • 塞尔日·盖尔顿
  • 史蒂芬·范德瓦尔特

合并的拉取请求

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

  • #21191: TYP, BUG:修复 np.lib.stride_tricks 重新导出的问题…
  • #21192: TST:将 mypy 从 0.931 升级到 0.940
  • #21243: 维护:明确重新导出 numpy._typing 中的类型
  • #21245: 维护:为 CI 文档构建指定 sphinx、numpydoc 版本
  • #21275: BUG:修复拼写错误
  • #21277: ENH, BLD:修复 wasm 的数学特性检测
  • #21350: 维护:修复 simd 和 cygwin 测试失败。
  • #21438: 维护:修复 Python 3.8 32 位 Windows 测试失败。
  • #21444: BUG:根据 #21386 添加 Linux 保护
  • #21445: BUG:允许旧数据类型再次转换为日期时间
  • #21446: BUG:在 frombuffer 中使 mmap 处理更安全
  • #21447: BUG:停止使用 Python 3.11 中已弃用的 PyBytesObject.ob_shash。
  • #21448: ENH:引入 numpy.core.setup_common.NPY_CXX_FLAGS
  • #21472: BUG:确保编译错误被正确引发
  • #21473: BUG:修复分段错误
  • #21474: 维护:更新文档要求
  • #21475: 维护:在 clang 上用 no_sanitize("alignment") 标记 npy_memchr
  • #21512: DOC:建议 - 使文档首页卡片更相似…
  • #21525: 维护:更新 Cython 版本至 0.29.30。
  • #21536: BUG:修复构建配置期间的 GCC 错误
  • #21541: REL:为 NumPy 1.22.4 版本发布做准备。
  • #21547: 维护:跳过在 PyPy 上失败的测试。

NumPy 1.22.3 发布说明

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

NumPy 1.22.3 是一个维护版本,修复了在 1.22.2 发布后发现的错误。最显著的修复可能是针对 DLPack 的修复。可能会引起一些问题的是不允许将字符串作为逻辑 ufunc 的输入。目前尚未决定如何处理这些函数中的字符串,最好的办法是简单地禁止它们,直到做出决定为止。这不应该对旧代码造成问题。

本次发布支持的 Python 版本为 3.8-3.10。请注意,Mac 的安装包现在基于 OS X 10.14 而不是之前 NumPy 版本周期中使用的 10.9。10.14 是苹果支持的最旧版本。

贡献者

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

  • @GalaxySnail
  • Alexandre de Siqueira
  • Bas van Beek
  • Charles Harris
  • Melissa Weber Mendonça
  • Ross Barnowski
  • Sebastian Berg
  • Tirth Patel
  • Matthieu Darbois

合并的拉取请求

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

  • #21048: 维护:在 travis 上使用“3.10”而不是“3.10-dev”。
  • #21106: 类型,维护:明确允许np.concatenate中的数组类序列
  • #21137: 构建,文档:跳过损坏的 ipython 8.1.0
  • #21138: 错误修复,增强:np._from_dlpack:导出正确的设备信息
  • #21139: 错误修复:修复 numba DUFuncs 添加循环被拾取的问题
  • #21140: 错误修复:修复对具有非零维度的空 ndarray 的反序列化…
  • #21141: 错误修复:使用 ThreadPoolExecutor 而不是 ThreadPool
  • #21142: API:禁止在逻辑 ufunc 中使用字符串
  • #21143: 维护,文档:修复 SciPy 的 intersphinx 链接
  • #21148: 错误修复,增强:np._from_dlpack:导出任意步幅大小为 1 的数组…

贡献者

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

  • @GalaxySnail
  • Alexandre de Siqueira
  • Bas van Beek
  • Charles Harris
  • Melissa Weber Mendonça
  • Ross Barnowski
  • Sebastian Berg
  • Tirth Patel
  • Matthieu Darbois

合并的拉取请求

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

  • #21048: 维护:在 travis 上使用“3.10”而不是“3.10-dev”。
  • #21106: 类型,维护:明确允许np.concatenate中的数组类序列
  • #21137: 构建,文档:跳过损坏的 ipython 8.1.0
  • #21138: BUG, ENH: np._from_dlpack: 导出正确的设备信息
  • #21139: BUG: 修复 numba DUFuncs 添加循环时的问题
  • #21140: BUG: 修复对具有非零维度的空 ndarray 进行反序列化的问题…
  • #21141: BUG: 使用 ThreadPoolExecutor 代替 ThreadPool
  • #21142: API: 禁止在逻辑 ufuncs 中使用字符串
  • #21143: MAINT, DOC: 修复 SciPy intersphinx 链接
  • #21148: BUG,ENH: np._from_dlpack: 导出任意步幅大小为 1 的数组…

NumPy 1.22.2 发布说明

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

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

  • 为下游项目和其他平台进行了几处构建相关的修复。
  • 各种注释修复/添加。
  • Windows 上的 Numpy wheels 将使用 1.41 工具链,修复了在 Windows 上使用 NumPy 提供的库的项目中出现的下游链接问题。
  • 处理 CVE-2021-41495 的投诉。

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

贡献者

本次发布共有 14 人贡献。名字后带有“ ”符号的人是第一次贡献补丁。

  • Andrew J. Hesford
  • Bas van Beek
  • Brénainn Woodsend
  • Charles Harris
  • Hood Chatham
  • Janus Heide
  • Leo Singer
  • Matti Picus
  • Mukulika Pahari
  • Niyas Sait
  • Pearu Peterson
  • Ralf Gommers
  • Sebastian Berg
  • Serge Guelton

合并的拉取请求

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

  • #20842: BLD: 添加 NPY_DISABLE_SVML 环境变量以退出 SVML
  • #20843: BUG: 修复使用 Py_LIMITED_API 构建第三方扩展的问题
  • #20844: TYP: 修复 pyright 无法推断realimag的问题…
  • #20845: BUG: 修复比较函数签名
  • #20906: BUG: 避免在导入 numpy.testing 时导入numpy.distutils
  • #20907: MAINT: 移除过时的 mingw32 fseek 支持
  • #20908: TYP: 放宽np.vectorize的返回类型
  • #20909: BUG: 修复使用 Mingw 构建时 f2py 的线程定义
  • #20910: BUG: distutils: 修复构建混合 C/Fortran 扩展的问题
  • #20912: DOC,TST: 根据新版本修复 Pandas 代码示例
  • #20935: TYP, MAINT: 为flatiter.__setitem__添加注释
  • #20936: MAINT, TYP: 在fromnumeric.pyi中添加了缺失的 where 类型提示
  • #20937: BUG: 修复 build_ext 与非 numpy 扩展的交互问题
  • #20938: BUG: 修复 Windows/arm64 目标缺失的内在函数
  • #20945: REL: 为 NumPy 1.22.2 发布做准备。
  • #20982: MAINT: f2py: 不生成触发-Wsometimes-uninitialized的代码。
  • #20983: BUG: 修复 reduce 没有初始值时的错误返回类型
  • #20984: ENH: 重新审查 PyArray_DescrNew 的返回值
  • #20985: MAINT: 更容忍 setuptools >= 60
  • #20986: BUG: 修复错误的返回位置。
  • #20992: MAINT: 进一步验证返回值的小修复

贡献者

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

  • Andrew J. Hesford
  • Bas van Beek
  • Brénainn Woodsend
  • Charles Harris
  • Hood Chatham
  • Janus Heide
  • Leo Singer
  • Matti Picus
  • Mukulika Pahari
  • Niyas Sait
  • Pearu Peterson
  • Ralf Gommers
  • Sebastian Berg
  • Serge Guelton

合并的拉取请求

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

  • #20842: BLD: 添加 NPY_DISABLE_SVML 环境变量以退出 SVML
  • #20843: BUG: 修复使用 Py_LIMITED_API 构建第三方扩展的问题
  • #20844: TYP: 修复 pyright 无法推断 realimag 的问题…
  • #20845: BUG: 修复比较函数签名
  • #20906: BUG: 避免在导入 numpy.testing 时导入 numpy.distutils
  • #20907: MAINT: 移除过时的 mingw32 fseek 支持
  • #20908: TYP: 放宽 np.vectorize 的返回类型
  • #20909: BUG: 修复使用 Mingw 构建时 f2py 的线程定义问题
  • #20910: BUG: distutils: 修复构建混合 C/Fortran 扩展的问题
  • #20912: DOC,TST: 根据新版本修复 Pandas 代码示例
  • #20935: TYP, MAINT: 为 flatiter.__setitem__ 添加注释
  • #20936: MAINT, TYP: 在 fromnumeric.pyi 中添加缺失的 where 类型提示
  • #20937: BUG: 修复 build_ext 与非 numpy 扩展的交互问题
  • #20938: BUG: 修复 Windows/arm64 目标缺失的内在函数
  • #20945: REL: 为 NumPy 1.22.2 版本做准备。
  • #20982: MAINT: f2py: 不生成触发 -Wsometimes-uninitialized 的代码。
  • #20983: BUG: 修复在没有初始值的情况下 reduce 的错误返回类型
  • #20984: ENH: 重新审查 PyArray_DescrNew 的返回值
  • #20985: MAINT: 更容忍 setuptools >= 60
  • #20986: BUG: 修复错误的返回位置。
  • #20992: MAINT: 进一步验证返回值的小修复

NumPy 1.22.1 发布说明

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

NumPy 1.22.1 是一个维护版本,修复了在 1.22.0 发布后发现的 bug。值得注意的修复包括:

  • 修复 f2PY 文档字符串问题(SciPy)
  • 修复减少类型问题(AstroPy)
  • 修复各种类型错���。

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

贡献者

总共有 14 位贡献者为此版本做出了贡献。名字旁边带有“ ”的人第一次为补丁做出了贡献。

  • Arryan Singh
  • Bas van Beek
  • Charles Harris
  • Denis Laxalde
  • Isuru Fernando
  • Kevin Sheppard
  • Matthew Barber
  • Matti Picus
  • Melissa Weber Mendonça
  • Mukulika Pahari
  • Omid Rajaei
  • Pearu Peterson
  • Ralf Gommers
  • Sebastian Berg

合并的拉取请求

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

  • #20702: 维护,文档:发布 1.22.0 后修复。
  • #20703: 文档,错误:使用 png 替代 svgs。
  • #20704: 文档:修复用户指南首页上的链接
  • #20714: 错误修复:恢复 vc141 支持
  • #20724: 错误修复:修复多维参数的数组维度求解器…
  • #20725: 类型:将__array_namespace__的类型注解更改为 ModuleType
  • #20726: 类型,维护:允许ndindex接受整数元组
  • #20757: 错误修复:在减少中放宽 dtype 标识检查
  • #20763: 类型:允许时间操作函数接受datetimedelta
  • #20768: 类型:放宽ndarray.__array_finalize__的类型
  • #20795: 维护:如果 setuptools 版本过新,则引发 RuntimeError。
  • #20796: 错误,文档:修复 SciPy 文档构建警告
  • #20797: 文档:修复发布说明中的 OpenBLAS 版本
  • #20798: 性能优化:优化数组检查以限制为 0、1 的值
  • #20805: 错误修复:修复 reduce-likes 总是尊重 out(并存在于…
  • #20806: 错误修复:array_api.argsort(descending=True) 尊重相对…
  • #20807: 错误修复:允许array_api中的幂相关函数接受整数输入
  • #20814: 文档:在主页中引用 NumPy,而不是 pandas
  • #20815: 文档:更新版权至 2022 [许可证]
  • #20819: 错误修复:在 array_api 设置中返回正确形状的逆索引…

贡献者

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

  • Arryan Singh
  • Bas van Beek
  • Charles Harris
  • Denis Laxalde
  • Isuru Fernando
  • Kevin Sheppard
  • Matthew Barber
  • Matti Picus
  • Melissa Weber Mendonça
  • Mukulika Pahari
  • Omid Rajaei
  • Pearu Peterson
  • Ralf Gommers
  • Sebastian Berg

已合并的拉取请求

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

  • #20702: MAINT, DOC: 1.22.0 发布后的修复。
  • #20703: DOC, BUG: 使用 png 替代 svgs。
  • #20704: DOC: 修复了用户指南首页的链接
  • #20714: BUG: 恢复了 vc141 支持
  • #20724: BUG: 修复了多维参数的数组维度求解器…
  • #20725: TYP: 将 __array_namespace__ 的类型注释更改为 ModuleType
  • #20726: TYP, MAINT: 允许 ndindex 接受整数元组
  • #20757: BUG: 放宽了缩减操作中的 dtype 标识检查
  • #20763: TYP: 允许时间操作函数接受 datetimedelta
  • #20768: TYP: 放宽了 ndarray.__array_finalize__ 的类型
  • #20795: MAINT: 如果 setuptools 版本过新,则引发 RuntimeError。
  • #20796: BUG, DOC: 修复了 SciPy 文档构建警告
  • #20797: DOC: 修复了发布说明中的 OpenBLAS 版本
  • #20798: PERF: 优化了对有界 0,1 值的数组检查
  • #20805: BUG: 修复了 reduce-likes 总是尊重 out 并存在于…的问题
  • #20806: BUG: array_api.argsort(descending=True) 尊重相对…
  • #20807: BUG: 允许 array_api 中的 pow 相关函数接受整数输入
  • #20814: DOC: 在主页中引用 NumPy,而不是 pandas
  • #20815: DOC: 将版权更新至 2022 年 [许可证]
  • #20819: BUG: 在 array_api set…中返回正确形状的逆索引

NumPy 1.22.0 发布说明

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

NumPy 1.22.0 是一个重要的发布版本,涵盖了来自 153 位贡献者的工作,分布在 609 个拉取请求中。有许多改进,重点包括:

  • 主命名空间的注释基本完成。上游是一个不断变化的目标,所以可能会有进一步的改进,但主要工作已经完成。这可能是本次发布中最为用户可见的增强功能。
  • 提供了拟议的 Array-API 的初步版本。这是创建可在应用程序(如 CuPy 和 JAX)中使用的标准函数集的一步。
  • NumPy 现在具有 DLPack 后端。DLPack 为数组(张量)数据提供了一个通用的交换格式。
  • quantilepercentile 和相关函数的新方法。这些新方法提供了文献中常见的方法的完整集合。
  • 通用函数已重构以实现大部分NEP 43。这也解锁了对未来 DType API 进行实验的能力。
  • 用于下游项目的新可配置分配器。

除了为常用函数提供 SIMD 支持、改进 F2PY 和改进文档之外,还有持续进行的工作。

本次发布支持的 Python 版本为 3.8-3.10,Python 3.7 已被删除。请注意,Mac wheels 现在基于 OS X 10.14 而不是之前 NumPy 发布周期中使用的 10.9。10.14 是 Apple 支持的最旧版本。还请注意,32 位 wheels 仅提供给 Windows 上的 Python 3.8 和 3.9,所有其他 wheels 都是 64 位的,因为 Ubuntu、Fedora 和其他 Linux 发行版已经放弃了 32 位支持。所有 64 位 wheels 也与 64 位整数 OpenBLAS 链接,这应该解决那些使用真正巨大数组时遇到的偶发问题。

过期的弃用

已删除了不推荐使用的数值样式 dtype 字符串。

使用字符串 "Bytes0""Datetime64""Str0""Uint32""Uint64" 作为 dtype 现在会引发 TypeError

(gh-19539)

npyio 中的 loadsndfromtxtmafromtxt 的弃用已过期

numpy.loads 在 v1.15 中已弃用,建议用户改用 pickle.loadsndfromtxtmafromtxt 在 v1.17 中都已弃用 - 用户应该改用 numpy.genfromtxt,并使用适当的值作为 usemask 参数。

(gh-19615)

弃���

在 mrecords 中使用 delimiter 而不是 delimitor 作为 kwarg

已将 numpy.ma.mrecords.fromtextfile() 的拼写错误关键字参数 delimitor 更改为 delimiter,使用它将会发出弃用警告。

(gh-19921)

将布尔值 kth 传递给(arg-)partition 已被弃用

numpy.partitionnumpy.argpartition 以前会接受 kth 参数的布尔值,随后会被转换为整数。这种行为现在已被弃用。

(gh-20000)

np.MachAr 类已被弃用

numpy.MachAr 类和 finfo.machar <numpy.finfo> 属性已被弃用。鼓励用户直接从相应的 numpy.finfo 属性中访问感兴趣的属性。

(gh-20201)

兼容性说明

Distutils 在 clang 上强制使用严格的浮点模型

NumPy 现在在 clang 上设置了 -ftrapping-math 选项,以强制执行正确的浮点错误处理对于通用函数。否则,Clang 默认为非 IEEE 和 C99 兼容行为。这个更改(使用等效但更新的 -ffp-exception-behavior=strict)在 NumPy 1.21 中尝试过,但实际上从未被使用。

(gh-19479)

移除了复杂类型的 floor division 支持

复杂类型的 floor division 现在会导致 TypeError

代码语言:javascript复制
>>> a = np.arange(10)   1j* np.arange(10)
>>> a // 1
TypeError: ufunc 'floor_divide' not supported for the input types... 

(gh-19135)

numpy.vectorize 函数现在产生与基本函数相同的输出类

当一个尊重 numpy.ndarray 子类的函数被使用 numpy.vectorize 向量化时,向量化函数现在也对子类安全,即使在给定签名的情况下(即,创建 gufunc 时):输出类将与首次调用基础函数时返回的类相同。

(gh-19356)

不再支持 Python 3.7

Python 支持已被移除。这是相当严格的,有些更改需要 Python >= 3.8。

(gh-19665)

复杂数据类型的 str/repr 现在在标点符号后包含空格。

np.dtype({"names": ["a"], "formats": [int], "offsets": [2]}) 的 repr 现在是 dtype({'names': ['a'], 'formats': ['<i8'], 'offsets': [2], 'itemsize': 10}),而以前在冒号后和字段之间省略了空格。

旧行为可以通过 np.set_printoptions(legacy="1.21") 恢复。

(gh-19687)

修正了PCG64DSXMPCG64中的advance

修复了PCG64DSXMPCG64advance方法中的一个 bug。该 bug 仅影响在步长大于(2^{64})时的结果,这种情况发生在不支持 128 位整数的平台上(例如 Windows 和 32 位 Linux)。

(gh-20049)

更改生成随机 32 位浮点变量的方式

生成 32 位浮点值的均匀分布中存在一个 bug,导致随机变量的最低有效位始终为 0。这个问题已经修复。

此更改影响由 random.Generator 方法 randomstandard_normalstandard_exponentialstandard_gamma 生成的变量,但仅当 dtype 指定为 numpy.float32 时。

(gh-20314)

C API 更改

掩码内部循环不再可以自定义

掩码内部循环选择器现在不再使用。在极少数情况下自定义时会发出警告。

我们不希望任何代码使用这个功能。如果您确实使用了它,必须在更新的 NumPy 版本上取消选择器。还请联系 NumPy 开发人员,我们预计会提供一种新的、更具体的机制。

定制是一个从未实现的功能的一部分,允许更快的掩码操作。

(gh-19259)

实验性地暴露未来的 DType 和 UFunc API

新的头文件 experimental_public_dtype_api.h 允许尝试未来的 API,以改进通用函数和特别是用户 DType 的支持。此时建议使用 NumPy 的开发版本进行实验,因为预计会有一些变化,并且将解锁新功能。

(gh-19919)

新功能

NEP 49 可配置分配器

如 NEP 49 中详细描述的那样,用于分配 ndarray 数据段的函数可以更改。策略可以在全局或上下文中设置。有关更多信息,请参阅 NEP 和 NumPy 中的内存管理 参考文档。还添加了 NUMPY_WARN_IF_NO_MEM_POLICY 覆盖,以警告在设置 NPY_ARRAY_OWNDATA 时危险地转移所有权的使用。

(gh-17582)

实现了 NEP 47(采用数组 API 标准)

作为 numpy.array_api 添加了 NEP 47(采用数组 API 标准)的初始实现。该实现是实验性的,并在导入时会发出 UserWarning,因为 数组 API 标准 仍处于草案状态。numpy.array_api 是数组 API 标准的符合实现,也是最小的,意味着只实现了标准要求的那些函数和行为(请参阅 NEP 了解更多信息)。鼓励希望使用数组 API 标准的库使用 numpy.array_api 来检查他们只使用了标准符合实现中保证存在的功能。

(gh-18585)

现在可以从注释块生成 C/C API 参考文档

此功能在生成过程中依赖于 Doxygen,并且依赖于 Breathe 与 Sphinx 集成。

(gh-18884)

通过一个 mypy 插件分配平台特定的 c_intp 精度。

mypy 插件,在 numpy/numpy#17843 中引入,现已扩展:插件现在负责设置 numpy.ctypeslib.c_intp 的平台特定精度,后者用作各种 numpy.ndarray.ctypes 属性的数据类型。

没有插件,上述类型将默认为 ctypes.c_int64

要启用插件,必须将其添加到其 mypy 配置文件 中:

代码语言:javascript复制
[mypy]
plugins  =  numpy.typing.mypy_plugin 

(gh-19062)

添加了符合 NEP 47 的 dlpack 支持。

添加了一个 ndarray.__dlpack__() 方法,返回一个包装在 PyCapsule 中的 dlpack C 结构。还添加了一个 np._from_dlpack(obj) 函数,其中 obj 支持 __dlpack__(),并返回一个 ndarray

(gh-19083)

keepdims 可选参数已添加到 numpy.argminnumpy.argmax

keepdims 参数已添加到 numpy.argminnumpy.argmax。如果设置为 True,则被减少的轴将保留在结果中作为大小为一的维度。结果数组具有相同数量的维度,并将与输入数组进行广播。

(gh-19211)

bit_count 用于计算整数中的 1 位数。

计算输入绝对值中的 1 位数。这适用于所有 numpy 整数类型。类似于内置的 int.bit_count 或 C 中的 popcount

代码语言:javascript复制
>>> np.uint32(1023).bit_count()
10
>>> np.int32(-127).bit_count()
7 

(gh-19355)

ndimaxis 属性已添加到 numpy.AxisError 中。

ndimaxis 参数现在也作为每个 numpy.AxisError 实例的属性存储。

(gh-19459)

windows/arm64 目标的初步支持。

numpy 增加了对 windows/arm64 目标的支持。请注意,OpenBLAS 对于 windows/arm64 目标尚不可用。

(gh-19513)

增加了对 LoongArch 的支持。

LoongArch 是一种新的指令集,numpy 在 LoongArch 架构上编译失败,因此添加了该提交。

(gh-19527)

添加了一个 .clang-format 文件。

Clang-format 是一个 C/C 代码格式化工具,与添加的 .clang-format 文件一起,它生成的代码与 NumPy C_STYLE_GUIDE 接近,可供一般使用。由于使用了几个新功能,需要 Clang-format 版本 12 ,它在 Fedora 34 和 Ubuntu Focal 等其他发行版中可用。

(gh-19754)

is_integer 现在适用于 numpy.floatingnumpy.integer

基于 Python 中的floatint,numpy 浮点和整数类型现在支持float.is_integer。如果数字是有限的整数值,则返回True,否则返回False

代码语言:javascript复制
>>> np.float32(-2.0).is_integer()
True
>>> np.float64(3.2).is_integer()
False
>>> np.int32(-2).is_integer()
True 

(gh-19803)

用于 Fortran 维度规范的符号解析器

在 f2py 中添加了一个新的符号解析器,以正确解析维度规范。该解析器是未来改进的基础,并与 Draft Fortran 202x 兼容。

(gh-19805)

ndarraydtypenumber现在可以在运行时进行下标访问

模仿PEP 585numpy.ndarraynumpy.dtypenumpy.number类现在可以在 Python 3.9 及更高版本中进行下标访问。因此,以前只允许在.pyi 存根文件中或借助from __future__ import annotations的帮助下的表达式现在也在运行时合法。

代码语言:javascript复制
>>> import numpy as np
>>> from typing import Any

>>> np.ndarray[Any, np.dtype[np.float64]]
numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]] 

(gh-19879)

改进

ctypeslib.load_library现在可以接受任何路径类对象

现在所有参数都可以接受任何path-like object。这包括字符串、字节和实现__fspath__协议的对象。

(gh-17530)

finfo添加smallest_normalsmallest_subnormal属性

属性smallest_normalsmallest_subnormal作为finfo类的扩展可用于任何浮点数据类型。要使用这些新属性,请写np.finfo(np.float64).smallest_normalnp.finfo(np.float64).smallest_subnormal

(gh-18536)

numpy.linalg.qr接受堆叠矩阵作为输入

numpy.linalg.qr能够为堆叠矩阵生成结果。此外,QR 分解的实现已从 Python 转移到 C。

(gh-19151)

numpy.fromregex现在接受os.PathLike实现

numpy.fromregex现在接受实现__fspath__<os.PathLike>协议的对象,例如pathlib.Path

(gh-19680)

quantilepercentile添加新方法

quantilepercentile现在具有method=关键字参数,支持 13 种不同的方法。这取代了interpolation=关键字参数。

这些方法现在与科学文献和 R 语言中的九种方法保持一致。其余方法是默认“linear”方法的以前不连续的变体。

请查看numpy.percentile的文档以获取更多信息。

(gh-19857)

已向nan<x>函数添加了缺失的参数

一些nan<x>函数以前缺少其<x>对应函数中存在的参数,例如 numpy.mean中存在的where参数在numpy.nanmean中不存在。

现在已将以下参数添加到nan<x>函数中:

  • nanmin: initialwhere
  • nanmax: initialwhere
  • nanargmin: keepdimsout
  • nanargmax: keepdimsout
  • nansum: initialwhere
  • nanprod: initialwhere
  • nanmean: where
  • nanvar: where
  • nanstd: where

(gh-20027)

对主要 Numpy 命名空间进行注释

从 1.20 版本开始,NumPy 库的部分部分已包含 PEP 484 类型注释;对剩余函数进行注释仍在进行中。随着 1.22 版本的发布,主要 NumPy 命名空间的这一过程已经完成,现在已完全注释。

除了主命名空间外,一些子包也包含注释。其中包括numpy.testingnumpy.linalgnumpy.random(自 1.21 版本起可用)。

(gh-20217)

使用 AVX-512 对 umath 模块进行矢量化

通过利用英特尔短向量数学库(SVML),18 个 umath 函数(exp2log2log10expm1log1pcbrtsincostanarcsinarccosarctansinhcoshtanharcsinharccosharctanh)使用 AVX-512 指令集进行矢量化,适用于单精度和双精度实现。此更改目前仅适用于 Linux 用户和具有 AVX-512 指令集的处理器。对于单精度和双精度函数,平均加速比分别为 32 倍和 14 倍。

(gh-19478)

OpenBLAS v0.3.18

更新测试和 wheels 中使用的 OpenBLAS 至 v0.3.18

(gh-20058)

过期的弃用功能

已删除弃用的数字样式 dtype 字符串

使用字符串"Bytes0", "Datetime64", "Str0", "Uint32", 和 "Uint64"作为 dtype 现在会引发TypeError错误。

(gh-19539)

npyio 中loadsndfromtxtmafromtxt的弃用已过期

numpy.loads在 v1.15 中已弃用,建议用户改用pickle.loadsndfromtxtmafromtxt在 v1.17 中都已弃用 - 用户应该改用numpy.genfromtxt,并使用适当的值作为usemask参数。

(gh-19615)

已删除弃用的数字样式 dtype 字符串

使用字符串"Bytes0", "Datetime64", "Str0", "Uint32", 和 "Uint64"作为 dtype 现在会引发TypeError错误。

(gh-19539)

npyio 中loadsndfromtxtmafromtxt的弃用已过期

numpy.loads在 v1.15 中已被弃用,建议用户改用pickle.loadsndfromtxtmafromtxt在 v1.17 中都已被弃用 - 用户应该改用numpy.genfromtxt,并使用usemask参数的适当值。

(gh-19615)

弃用

在 mrecords 中使用 delimiter 而不是 delimitor 作为 kwarg

numpy.ma.mrecords.fromtextfile()的拼写错误关键字参数delimitor已更改为delimiter,使用它将会发出弃用警告。

(gh-19921)

将布尔值kth传递给(arg-)partition 已被弃用

numpy.partitionnumpy.argpartition以前会接受kth参数的布尔值,随后会被转换为整数。这种行为现已被弃用。

(gh-20000)

np.MachAr类已被弃用

numpy.MachAr类和finfo.machar <numpy.finfo>属性已被弃用。鼓励用户直接从相应的numpy.finfo属性中访问感兴趣的属性。

(gh-20201)

在 mrecords 中使用 delimiter 而不是 delimitor 作为 kwarg

numpy.ma.mrecords.fromtextfile()的拼写错误关键字参数delimitor已更改为delimiter,使用它将会发出弃用警告。

(gh-19921)

将布尔值kth传递给(arg-)partition 已被弃用

numpy.partitionnumpy.argpartition以前会接受kth参数的布尔值,随后会被转换为整数。这种行为现已被弃用。

(gh-20000)

np.MachAr类已被弃用

numpy.MachAr类和finfo.machar <numpy.finfo>属性已被弃用。鼓励用户直接从相应的numpy.finfo属性中访问感兴趣的属性。

(gh-20201)

兼容性说明

Distutils 在 clang 上强制使用严格的浮点模型

NumPy 现在在 clang 上设置了-ftrapping-math选项,以强制正确处理通用函数的浮点错误处理。否则,Clang 默认为非 IEEE 和 C99 符合行为。这种更改(使用等效但更新的-ffp-exception-behavior=strict)曾在 NumPy 1.21 中尝试过,但实际上从未被使用过。

(gh-19479)

移除了复数类型的地板除法支持

复数类型的地板除法现在将导致TypeError

代码语言:javascript复制
>>> a = np.arange(10)   1j* np.arange(10)
>>> a // 1
TypeError: ufunc 'floor_divide' not supported for the input types... 

(gh-19135)

numpy.vectorize函数现在产生与基本函数相同的输出类

当一个尊重numpy.ndarray子类的函数被使用numpy.vectorize向量化时,对于给定签名的情况(即创建gufunc时),向量化函数现在也将对子类安全:输出类将与对底层函数的第一次调用返回的类相同。

(gh-19356)

Python 3.7 不再受支持

Python 支持已被删除。这是相当严格的,有些更改需要 Python >= 3.8。

(gh-19665)

复数 dtype 的 str/repr 现在在标点符号后包含空格。

np.dtype({"names": ["a"], "formats": [int], "offsets": [2]})的 repr 现在是dtype({'names': ['a'], 'formats': ['<i8'], 'offsets': [2], 'itemsize': 10}),而以前在冒号后和字段之间省略了空格。

旧行为可以通过np.set_printoptions(legacy="1.21")恢复。

(gh-19687)

修正了PCG64DSXMPCG64中的advance

修复了PCG64DSXMPCG64advance方法中的一个错误。该错误仅影响在步长大于(2^{64})时的结果,这种情况发生在不支持 128 位整数的平台上(例如 Windows 和 32 位 Linux)。

(gh-20049)

更改生成随机 32 位浮点变量的方式

存在一个 bug,即从均匀分布生成 32 位浮点值的最低有效位始终为 0。已修复此问题。

此更改影响由random.Generator方法randomstandard_normalstandard_exponentialstandard_gamma生成的变量,但仅当 dtype 指定为numpy.float32时。

(gh-20314)

Distutils 在 clang 上强制使用严格的浮点模型

NumPy 现在在 clang 上设置了-ftrapping-math选项,以强制执行通用函数的正确浮点错误处理。否则,Clang 默认为非 IEEE 和 C99 符合的行为。这种变化(使用等效但更新的-ffp-exception-behavior=strict)曾在 NumPy 1.21 中尝试过,但实际上从未被使用。

(gh-19479)

移除了复数类型的地板除法支持

复数类型的地板除法现在将导致TypeError

代码语言:javascript复制
>>> a = np.arange(10)   1j* np.arange(10)
>>> a // 1
TypeError: ufunc 'floor_divide' not supported for the input types... 

(gh-19135)

numpy.vectorize函数现在产生与基本函数相同的输出类

当一个尊重numpy.ndarray子类的函数被使用numpy.vectorize向量化时,对于给定签名的情况(即创建gufunc时),向量化函数现在也将对子类安全:输出类将与对底层函数的第一次调用返回的类相同。

(gh-19356)

Python 3.7 不再受支持

Python 支持已被移除。这是相当严格的,有些更改要求 Python >= 3.8。

(gh-19665)

复数 dtype 的 str/repr 现在在标点符号后包含空格

np.dtype({"names": ["a"], "formats": [int], "offsets": [2]})的 repr 现在是dtype({'names': ['a'], 'formats': ['<i8'], 'offsets': [2], 'itemsize': 10}),而以前在冒号后和字段之间省略了空格。

可通过np.set_printoptions(legacy="1.21")恢复旧行为。

(gh-19687)

修正了PCG64DSXMPCG64中的advance

修复了PCG64DSXMPCG64advance方法中的一个 bug。该 bug 仅影响在步长大于(2^{64})时在不支持 128 位整数的平台上的结果(例如 Windows 和 32 位 Linux)。

(gh-20049)

更改生成随机 32 位浮点变量的方式

在从均匀分布生成 32 位浮点值时存在 bug,导致随机变量的最低有效位始终为 0。已修复此问题。

此更改影响由random.Generator方法randomstandard_normalstandard_exponentialstandard_gamma生成的变量,但仅当 dtype 指定为numpy.float32时。

(gh-20314)

C API 更改

无法再自定义掩码内部循环

掩码内部循环选择器现在不再使用。在极少情况下,如果进行了自定义,将发出警告。

我们不希望任何代码使用此功能。如果您确实使用了,请在更新的 NumPy 版本上取消选择器。还请联系 NumPy 开发人员,我们预计会提供一种新的、更具体的机制。

自定义是一个从未实现的功能的一部分,旨在实现更快的掩码操作。

(gh-19259)

实验性暴露未来的 DType 和 UFunc API

新的头文件experimental_public_dtype_api.h允许尝试使用未来的 API 来改进通用函数,特别是用户 DType 的支持。目前建议使用 NumPy 的开发版本进行实验,因为预计会有一些变化并且将解锁新功能。

(gh-19919)

无法再自定义掩码内部循环

掩码内部循环选择器现在不再使用。在极少情况下,如果进行了自定义,将发出警告。

我们不希望任何代码使用此功能。如果您确实使用了,请在更新的 NumPy 版本上取消选择器。还请联系 NumPy 开发人员,我们预计会提供一种新的、更具体的机制。

自定义是一个从未实现的功能的一部分,旨在实现更快的掩码操作。

(gh-19259)

实验性暴露未来的 DType 和 UFunc API

新的头文件experimental_public_dtype_api.h允许尝试未来用于改进通用函数和特别是用户 DType 支持的 API。此时建议使用 NumPy 的开发版本进行实验,因为预计会有一些更改并将解锁新功能。

(gh-19919)

新特性

NEP 49 可配置分配器

如NEP 49中详细说明,可以更改用于分配 ndarray 数据段的函数。策略可以在全局或上下文中设置。有关更多信息,请参阅 NEP 和 NumPy 中的内存管理参考文档。还添加了NUMPY_WARN_IF_NO_MEM_POLICY覆盖,以警告通过设置NPY_ARRAY_OWNDATA来传递所有权的危险用法。

(gh-17582)

实现 NEP 47(采用数组 API 标准)

NEP 47的初始实现(采用数组 API 标准)已添加为numpy.array_api。该实现是实验性的,并在导入时会发出 UserWarning,因为数组 API 标准仍处于草案状态。numpy.array_api是数组 API 标准的符合实现,也是最小的,意味着只实现了标准要求的那些函数和行为(详细信息请参阅 NEP)。鼓励希望使用数组 API 标准的库使用numpy.array_api来检查他们只使用标准符合实现中保证存在的功能。

(gh-18585)

现在可以从注释块生成 C/C API 参考文档

此功能依赖于Doxygen在生成过程中以及Breathe与 Sphinx 集成。

(gh-18884)

通过 mypy 插件分配平台特定的c_intp精度

mypy插件,引入自numpy/numpy#17843,再次被扩展:该插件现在负责设置numpy.ctypeslib.c_intp的平台特定精度,后者被用作各种numpy.ndarray.ctypes属性的数据类型。

没有插件,上述类型将默认为ctypes.c_int64

要启用插件,必须将其添加到其 mypy配置文件中:

代码语言:javascript复制
[mypy]
plugins  =  numpy.typing.mypy_plugin 

(gh-19062)

添加 NEP 47 兼容的 dlpack 支持

添加了一个 ndarray.__dlpack__() 方法,返回一个包装在 PyCapsule 中的 dlpack C 结构。还添加了一个 np._from_dlpack(obj) 函数,其中 obj 支持 __dlpack__(),并返回一个 ndarray

(gh-19083)

keepdims 可选参数已添加到 numpy.argminnumpy.argmax

keepdims 参数已添加到 numpy.argminnumpy.argmax 中。如果设置为 True,则被减少的轴将保留在结果中作为大小为一的维度。结果数组具有相同数量的维度,并将与输入数组进行广播。

(gh-19211)

bit_count 用于计算整数中的 1 位数

计算输入的绝对值中的 1 位数。这适用于所有 numpy 整数类型。类似于内置的 int.bit_count 或 C 中的 popcount

代码语言:javascript复制
>>> np.uint32(1023).bit_count()
10
>>> np.int32(-127).bit_count()
7 

(gh-19355)

ndimaxis 属性已添加到 numpy.AxisError

ndimaxis 参数现在也作为每个 numpy.AxisError 实例的属性存储。

(gh-19459)

windows/arm64 目标的初步支持

numpy 增加了对 windows/arm64 目标的支持。请注意,windows/arm64 目标尚不支持 OpenBLAS

(gh-19513)

增加了对龙芯架构的支持

LoongArch 是一种新的指令集,numpy 在 LoongArch 架构上编译失败,因此添加了该提交。

(gh-19527)

添加了一个 .clang-format 文件

Clang-format 是一个 C/C 代码格式化工具,与新增的 .clang-format 文件一起,它生成的代码与 NumPy C_STYLE_GUIDE 接近,可供一般使用。由于使用了几个新功能,需要 Clang-format 版本 12 ,它在 Fedora 34 和 Ubuntu Focal 等其他发行版中可用。

(gh-19754)

is_integer 现在适用于 numpy.floatingnumpy.integer

基于 Python 中 floatint 的对应物,numpy 浮点和整数类型现在支持 float.is_integer。如果数字是有限的整数值,则返回 True,否则返回 False

代码语言:javascript复制
>>> np.float32(-2.0).is_integer()
True
>>> np.float64(3.2).is_integer()
False
>>> np.int32(-2).is_integer()
True 

(gh-19803)

用于 Fortran 维度规范的符号解析器

在 f2py 中添加了一个新的符号解析器,以正确解析维度规范。该解析器是未来改进的基础,并提供了与 Draft Fortran 202x 的兼容性。

(gh-19805)

ndarraydtypenumber 现在支持运行时下标

模仿 PEP 585numpy.ndarraynumpy.dtypenumpy.number 类现在可以在 Python 3.9 及更高版本中进行下标操作。因此,以前仅允许在 .pyi 存根文件中或通过 from __future__ import annotations 的帮助下允许的表达式现在也在运行时合法。

代码语言:javascript复制
>>> import numpy as np
>>> from typing import Any

>>> np.ndarray[Any, np.dtype[np.float64]]
numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]] 

(gh-19879)

NEP 49 可配置的分配器

如 NEP 49 中详细说明的,可以更改用于分配 ndarray 数据段的函数。策略可以在全局或上下文中设置。有关更多信息,请参阅 NEP 和 NumPy 中的内存管理 参考文档。还添加了一个 NUMPY_WARN_IF_NO_MEM_POLICY 覆盖,以警告危险的所有权转移设置 NPY_ARRAY_OWNDATA

(gh-17582)

实现 NEP 47(采用数组 API 标准)

NEP 47 的初始实现(采用数组 API 标准)已添加为 numpy.array_api。该实现是实验性的,并将在导入时发出 UserWarning,因为 数组 API 标准 仍处于草案状态。numpy.array_api 是数组 API 标准的符合实现,也是最小的,意味着只实现了标准要求的那些功能和行为(请参阅 NEP 了解更多信息)。鼓励希望使用数组 API 标准的库使用 numpy.array_api 来检查他们只使用标准符合实现中保证存在的功能。

(gh-18585)

现在可以从注释块生成 C/C API 参考文档

此功能依赖于 Doxygen 的生成过程和 Breathe 与 Sphinx 集成。

(gh-18884)

通过一个 mypy 插件分配特定于平台的 c_intp 精度

在 numpy/numpy#17843 中引入的 mypy 插件再次扩展:插件现在负责设置 numpy.ctypeslib.c_intp 的特定于平台的精度,后者用作各种 numpy.ndarray.ctypes 属性的数据类型。

没有插件,上述类型将默认为 ctypes.c_int64

要启用插件,必须将其添加到其 mypy 配置文件 中:

代码语言:javascript复制
[mypy]
plugins  =  numpy.typing.mypy_plugin 

(gh-19062)

添加 NEP 47 兼容的 dlpack 支持

添加了一个ndarray.__dlpack__()方法,返回一个包装在PyCapsule中的dlpack C 结构。同时添加了一个np._from_dlpack(obj)函数,其中obj支持__dlpack__(),并返回一个ndarray

(gh-19083)

keepdims可选参数已添加到numpy.argminnumpy.argmax

keepdims参数已添加到numpy.argminnumpy.argmax。如果设置为True,则被减少的轴将作为大小为一的维度保留在结果中。结果数组具有相同数量的维度,并将与输入数组进行广播。

(gh-19211)

bit_count用于计算整数中 1 位的数量

计算输入绝对值中 1 位的数量。适用于所有 numpy 整数类型。类似于内置的int.bit_count或 C 中的popcount

代码语言:javascript复制
>>> np.uint32(1023).bit_count()
10
>>> np.int32(-127).bit_count()
7 

(gh-19355)

ndimaxis属性已添加到numpy.AxisError

ndimaxis参数现在也作为每个numpy.AxisError实例的属性存储。

(gh-19459)

windows/arm64目标的初步支持

numpy现已支持 Windows/arm64 目标。请注意,Windows/arm64 目标尚不支持OpenBLAS

(gh-19513)

添加了对 LoongArch 的支持

LoongArch 是一种新的指令集,numpy 在 LoongArch 架构上的编译失败,因此添加了该提交。

(gh-19527)

添加了一个.clang-format文件

Clang-format 是一个 C/C 代码格式化工具,与新增的.clang-format文件一起,它生成与 NumPy C_STYLE_GUIDE 接近的代码,可供一般使用。由于使用了几个新功能,需要 Clang-format 版本 12 ,它在 Fedora 34 和 Ubuntu Focal 等其他发行版中可用。

(gh-19754)

is_integer现在适用于numpy.floatingnumpy.integer

基于 Python 中floatint的对应物,numpy 浮点和整数类型现在支持float.is_integer。如果数字是有限的整数值,则返回True,否则返回False

代码语言:javascript复制
>>> np.float32(-2.0).is_integer()
True
>>> np.float64(3.2).is_integer()
False
>>> np.int32(-2).is_integer()
True 

(gh-19803)

Fortran 维度规范的符号解析器

为了正确解析维度规范,f2py 添加了一个新的符号解析器。该解析器是未来改进的基础,并与 Draft Fortran 202x 兼容。

(gh-19805)

ndarraydtypenumber现在可以在运行时进行下标访问

模仿PEP 585numpy.ndarraynumpy.dtypenumpy.number类现在可以在 Python 3.9 及更高版本中进行下标操作。因此,以前只允许在.pyi 存根文件中或借助from __future__ import annotations的帮助下的表达式现在也在运行时合法。

代码语言:javascript复制
>>> import numpy as np
>>> from typing import Any

>>> np.ndarray[Any, np.dtype[np.float64]]
numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]] 

(gh-19879)

改进

ctypeslib.load_library现在可以接受任何类似路径的对象

现在所有参数都可以接受任何path-like object. 这包括字符串、字节和实现__fspath__协议的对象。

(gh-17530)

finfo添加smallest_normalsmallest_subnormal属性

属性smallest_normalsmallest_subnormal作为任何浮点数据类型的finfo类的扩展可用。要使用这些新属性,写np.finfo(np.float64).smallest_normalnp.finfo(np.float64).smallest_subnormal

(gh-18536)

numpy.linalg.qr接受堆叠矩阵作为输入

numpy.linalg.qr能够为堆叠矩阵产生结果。此外,QR 分解的实现已从 Python 转移到 C。

(gh-19151)

numpy.fromregex现在接受os.PathLike实现

numpy.fromregex现在接受实现__fspath__<os.PathLike>协议的对象,例如 pathlib.Path

(gh-19680)

添加了quantilepercentile的新方法

quantilepercentile现在有一个method=关键字参数,支持 13 种不同的方法。这取代了interpolation=关键字参数。

这些方法现在与科学文献和 R 语言中的九种方法保持一致。其余方法是默认的“linear”方法的以前不连续的变体。

请查看numpy.percentile的文档以获取更多信息。

(gh-19857)

nan<x>函数中添加了缺失的参数

一些nan<x>函数以前缺少其<x>对应函数中存在的参数,例如 numpy.mean中存在的where参数���numpy.nanmean中缺失。

现在已将以下参数添加到nan<x>函数中:

  • nanmin:initialwhere
  • nanmax:initialwhere
  • nanargmin:keepdimsout
  • nanargmax:keepdimsout
  • nansum:initialwhere
  • nanprod:initialwhere
  • nanmean:where
  • nanvar:where
  • nanstd:where

(gh-20027)

对主要的 Numpy 命名空间进行注释

从 1.20 版本开始,NumPy 库的部分部分已包含 PEP 484 类型注释;对其余函数进行注释仍在进行中。随着 1.22 版本的发布,主要 NumPy 命名空间的此过程已完成,现在已完全注释。

除主命名空间外,一些子包也包含注释。其中包括numpy.testingnumpy.linalgnumpy.random(自 1.21 版本起可用)。

(gh-20217)

使用 AVX-512 对 umath 模块进行矢量化

通过利用英特尔短向量数学库(SVML),18 个 umath 函数(exp2log2log10expm1log1pcbrtsincostanarcsinarccosarctansinhcoshtanharcsinharccosharctanh)使用 AVX-512 指令集进行矢量化,适用于单精度和双精度实现。此更改目前仅对 Linux 用户和具有 AVX-512 指令集的处理器启用。它为单精度和双精度函数提供平均加速比分别为 32 倍和 14 倍。

(gh-19478)

OpenBLAS v0.3.18

更新用于测试和轮毂中的 OpenBLAS 至 v0.3.18

(gh-20058)

ctypeslib.load_library现在可以接受任何类似路径的对象

现在所有参数都可以接受任何类似路径的对象。这包括字符串、字节和实现__fspath__协议的对象。

(gh-17530)

smallest_normalsmallest_subnormal属性添加到finfo

属性smallest_normalsmallest_subnormal作为任何浮点数据类型的finfo类的扩展可用。要使用这些新属性,请写np.finfo(np.float64).smallest_normalnp.finfo(np.float64).smallest_subnormal

(gh-18536)

numpy.linalg.qr接受堆叠矩阵作为输入

numpy.linalg.qr能够为堆叠矩阵生成结果。此外,QR 分解的实现已从 Python 转移到 C。

(gh-19151)

numpy.fromregex现在接受os.PathLike实现

numpy.fromregex现在接受实现__fspath__<os.PathLike>协议的对象,例如 pathlib.Path

(gh-19680)

quantilepercentile添加新方法

quantilepercentile现在有一个method=关键字参数,支持 13 种不同的方法。这取代了interpolation=关键字参数。

这些方法现在与科学文献和 R 语言中的九种方法保持一致。其余方法是默认“linear”方法的以前不连续的变体。

有关更多信息,请参阅numpy.percentile的文档。

(gh-19857)

已添加缺失的参数到nan<x>函数中

一些以前的nan<x>函数缺少其基于<x>的对应函数中存在的参数,例如numpy.mean中存在where参数,但在numpy.nanmean中不存在。

现在已将以下参数添加到nan<x>函数中:

  • nanmin: initial & where
  • nanmax: initial & where
  • nanargmin: keepdims & out
  • nanargmax: keepdims & out
  • nansum: initial & where
  • nanprod: initial & where
  • nanmean: where
  • nanvar: where
  • nanstd: where

(gh-20027)

注释主要 Numpy 命名空间

从 1.20 版本开始,NumPy 库的部分部分已包含 PEP 484 类型注释;对其余函数进行注释仍在进行中。随着 1.22 版本的发布,主要 NumPy 命名空间的这一过程已完成,现在已完全注释。

除主命名空间外,一些子包也包含注释。其中包括numpy.testingnumpy.linalgnumpy.random(自 1.21 版本起可用)。

(gh-20217)

使用 AVX-512 对 umath 模块进行矢量化

通过利用英特尔短向量数学库(SVML),18 个 umath 函数(exp2log2log10expm1log1pcbrtsincostanarcsinarccosarctansinhcoshtanharcsinharccosharctanh)使用 AVX-512 指令集进行矢量化,适用于单精度和双精度实现。此更改目前仅适用于 Linux 用户和具有 AVX-512 指令集的处理器。对于单精度和双精度函数,平均加速比分别为 32 倍和 14 倍。

(gh-19478)

OpenBLAS v0.3.18

更新测试和轮子中使用的 OpenBLAS 至 v0.3.18

(gh-20058)

0 人点赞