原文:
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.loadtxt
中max_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.loadtxt
中max_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) - 移除了
alen
和asscalar
函数。 (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 支持从派生类型语句中读取访问类型属性
因此,不需要使用public
或private
语句来指定派生类型的访问属性。
(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.f
,modname-f2pywrappers2.f90
都将无条件生成,可能为空。这允许在cmake
或meson
等构建系统中编写通用输出规则。通过向f2py
传递--skip-empty-wrappers
可以恢复旧行为。通过 meson 使用详细使用说明。
(gh-21187)
average
的keepdims
参数
将参数keepdims
添加到函数numpy.average
和numpy.ma.average
中。该参数的含义与numpy.sum
或numpy.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
:
>>> 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
此更改仅影响float32
和float16
向量,ord
不是-Inf
,0
,1
,2
和Inf
。
(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
现在永远不会打印包括offsets
和itemsize
的长格式,除非结构包含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
:
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 乘积时保留子类信息
>>> 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
)以确定输出类类型
>>> 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.sum
、numpy.prod
、numpy.add.reduce
、numpy.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=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 年内完全移除。更多详情,请参见 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) -
alen
和asscalar
函数已被移除。 (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 支持从派生类型语句中读取访问类型属性
因此,不需要使用public
或private
语句来指定派生类型的访问属性。
(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.f
,modname-f2pywrappers2.f90
都将无条件生成,可能为空。这允许在cmake
或meson
等构建系统中编写通用输出规则。通过向f2py
传递--skip-empty-wrappers
可以恢复旧行为。通过 meson 使用详细使用说明。
(gh-21187)
average
的keepdims
参数
参数keepdims
已添加到函数numpy.average
和numpy.ma.average
中。该参数的含义与numpy.sum
或numpy.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 支持从派生类型语句中读取访问类型属性
因此,不需要使用 public
或 private
语句来指定派生类型的访问属性。
(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.f
,modname-f2pywrappers2.f90
都将无条件生成,并且可能为空。这允许在 cmake
或 meson
等构建系统中编写通用输出规则。通过向 f2py
传递 --skip-empty-wrappers
可恢复旧行为。通过 meson 使用 详细说明用法。
(gh-21187)
average
的 keepdims
参数
函数 numpy.average
和 numpy.ma.average
添加了参数 keepdims
。该参数在 numpy.sum
或 numpy.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
:
>>> 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
此更改仅影响float32
和float16
向量,ord
不是-Inf
,0
,1
,2
和Inf
时。
(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
现在永远不会打印包括offsets
和itemsize
的长格式,除非结构包含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
:
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
:
>>> 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
不是-Inf
、0
、1
、2
和Inf
的float32
和float16
向量。
(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
现在永远不会打印包括offsets
和itemsize
的长形式,除非结构包含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
:
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 积时保留子类信息,比如掩码数组
>>> 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
)以确定输出类别类型
>>> 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 积时保留子类信息,比如掩码数组
>>> 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
)以确定输出类别类型
>>> 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.sum
,numpy.prod
,numpy.add.reduce
,numpy.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.sum
、numpy.prod
、numpy.add.reduce
、numpy.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 无法推断
real
和imag
的问题… - #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 无法推断
real
和imag
的问题… - #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: 类型:允许时间操作函数接受
date
和timedelta
… - #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: 允许时间操作函数接受
date
和timedelta
… - #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 为数组(张量)数据提供了一个通用的交换格式。
-
quantile
、percentile
和相关函数的新方法。这些新方法提供了文献中常见的方法的完整集合。 - 通用函数已重构以实现大部分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 中的 loads
、ndfromtxt
和 mafromtxt
的弃用已过期
numpy.loads
在 v1.15 中已弃用,建议用户改用 pickle.loads
。ndfromtxt
和 mafromtxt
在 v1.17 中都已弃用 - 用户应该改用 numpy.genfromtxt
,并使用适当的值作为 usemask
参数。
(gh-19615)
弃���
在 mrecords 中使用 delimiter 而不是 delimitor 作为 kwarg
已将 numpy.ma.mrecords.fromtextfile()
的拼写错误关键字参数 delimitor
更改为 delimiter
,使用它将会发出弃用警告。
(gh-19921)
将布尔值 kth
传递给(arg-)partition 已被弃用
numpy.partition
和 numpy.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
>>> 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)
修正了PCG64DSXM
和PCG64
中的advance
修复了PCG64DSXM
和PCG64
的advance
方法中的一个 bug。该 bug 仅影响在步长大于(2^{64})时的结果,这种情况发生在不支持 128 位整数的平台上(例如 Windows 和 32 位 Linux)。
(gh-20049)
更改生成随机 32 位浮点变量的方式
生成 32 位浮点值的均匀分布中存在一个 bug,导致随机变量的最低有效位始终为 0。这个问题已经修复。
此更改影响由 random.Generator
方法 random
、standard_normal
、standard_exponential
和 standard_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.argmin
、numpy.argmax
。
keepdims
参数已添加到 numpy.argmin
、numpy.argmax
。如果设置为 True
,则被减少的轴将保留在结果中作为大小为一的维度。结果数组具有相同数量的维度,并将与输入数组进行广播。
(gh-19211)
bit_count
用于计算整数中的 1 位数。
计算输入绝对值中的 1 位数。这适用于所有 numpy 整数类型。类似于内置的 int.bit_count
或 C 中的 popcount
。
>>> np.uint32(1023).bit_count()
10
>>> np.int32(-127).bit_count()
7
(gh-19355)
ndim
和 axis
属性已添加到 numpy.AxisError
中。
ndim
和 axis
参数现在也作为每个 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.floating
和 numpy.integer
。
基于 Python 中的float
和int
,numpy 浮点和整数类型现在支持float.is_integer
。如果数字是有限的整数值,则返回True
,否则返回False
。
>>> 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)
ndarray
、dtype
和number
现在可以在运行时进行下标访问
模仿PEP 585,numpy.ndarray
、numpy.dtype
和numpy.number
类现在可以在 Python 3.9 及更高版本中进行下标访问。因此,以前只允许在.pyi 存根文件中或借助from __future__ import annotations
的帮助下的表达式现在也在运行时合法。
>>> 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_normal
和smallest_subnormal
属性
属性smallest_normal
和smallest_subnormal
作为finfo
类的扩展可用于任何浮点数据类型。要使用这些新属性,请写np.finfo(np.float64).smallest_normal
或np.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)
为quantile
和percentile
添加新方法
quantile
和percentile
现在具有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.testing
、numpy.linalg
和numpy.random
(自 1.21 版本起可用)。
(gh-20217)
使用 AVX-512 对 umath 模块进行矢量化
通过利用英特尔短向量数学库(SVML),18 个 umath 函数(exp2
、log2
、log10
、expm1
、log1p
、cbrt
、sin
、cos
、tan
、arcsin
、arccos
、arctan
、sinh
、cosh
、tanh
、arcsinh
、arccosh
、arctanh
)使用 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 中loads
、ndfromtxt
和mafromtxt
的弃用已过期
numpy.loads
在 v1.15 中已弃用,建议用户改用pickle.loads
。ndfromtxt
和mafromtxt
在 v1.17 中都已弃用 - 用户应该改用numpy.genfromtxt
,并使用适当的值作为usemask
参数。
(gh-19615)
已删除弃用的数字样式 dtype 字符串
使用字符串"Bytes0"
, "Datetime64"
, "Str0"
, "Uint32"
, 和 "Uint64"
作为 dtype 现在会引发TypeError
错误。
(gh-19539)
npyio 中loads
、ndfromtxt
和mafromtxt
的弃用已过期
numpy.loads
在 v1.15 中已被弃用,建议用户改用pickle.loads
。ndfromtxt
和mafromtxt
在 v1.17 中都已被弃用 - 用户应该改用numpy.genfromtxt
,并使用usemask
参数的适当值。
(gh-19615)
弃用
在 mrecords 中使用 delimiter 而不是 delimitor 作为 kwarg
numpy.ma.mrecords.fromtextfile()
的拼写错误关键字参数delimitor
已更改为delimiter
,使用它将会发出弃用警告。
(gh-19921)
将布尔值kth
传递给(arg-)partition 已被弃用
numpy.partition
和numpy.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.partition
和numpy.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
>>> 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)
修正了PCG64DSXM
和PCG64
中的advance
修复了PCG64DSXM
和PCG64
的advance
方法中的一个错误。该错误仅影响在步长大于(2^{64})时的结果,这种情况发生在不支持 128 位整数的平台上(例如 Windows 和 32 位 Linux)。
(gh-20049)
更改生成随机 32 位浮点变量的方式
存在一个 bug,即从均匀分布生成 32 位浮点值的最低有效位始终为 0。已修复此问题。
此更改影响由random.Generator
方法random
、standard_normal
、standard_exponential
和standard_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
>>> 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)
修正了PCG64DSXM
和PCG64
中的advance
修复了PCG64DSXM
和PCG64
的advance
方法中的一个 bug。该 bug 仅影响在步长大于(2^{64})时在不支持 128 位整数的平台上的结果(例如 Windows 和 32 位 Linux)。
(gh-20049)
更改生成随机 32 位浮点变量的方式
在从均匀分布生成 32 位浮点值时存在 bug,导致随机变量的最低有效位始终为 0。已修复此问题。
此更改影响由random.Generator
方法random
、standard_normal
、standard_exponential
和standard_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.argmin
、numpy.argmax
中
keepdims
参数已添加到 numpy.argmin
、numpy.argmax
中。如果设置为 True
,则被减少的轴将保留在结果中作为大小为一的维度。结果数组具有相同数量的维度,并将与输入数组进行广播。
(gh-19211)
bit_count
用于计算整数中的 1 位数
计算输入的绝对值中的 1 位数。这适用于所有 numpy 整数类型。类似于内置的 int.bit_count
或 C 中的 popcount
。
>>> np.uint32(1023).bit_count()
10
>>> np.int32(-127).bit_count()
7
(gh-19355)
ndim
和 axis
属性已添加到 numpy.AxisError
中
ndim
和 axis
参数现在也作为每个 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.floating
和 numpy.integer
基于 Python 中 float
和 int
的对应物,numpy 浮点和整数类型现在支持 float.is_integer
。如果数字是有限的整数值,则返回 True
,否则返回 False
。
>>> 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)
ndarray
、dtype
和 number
现在支持运行时下标
模仿 PEP 585,numpy.ndarray
、numpy.dtype
和 numpy.number
类现在可以在 Python 3.9 及更高版本中进行下标操作。因此,以前仅允许在 .pyi 存根文件中或通过 from __future__ import annotations
的帮助下允许的表达式现在也在运行时合法。
>>> 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.argmin
,numpy.argmax
keepdims
参数已添加到numpy.argmin
,numpy.argmax
。如果设置为True
,则被减少的轴将作为大小为一的维度保留在结果中。结果数组具有相同数量的维度,并将与输入数组进行广播。
(gh-19211)
bit_count
用于计算整数中 1 位的数量
计算输入绝对值中 1 位的数量。适用于所有 numpy 整数类型。类似于内置的int.bit_count
或 C 中的popcount
。
>>> np.uint32(1023).bit_count()
10
>>> np.int32(-127).bit_count()
7
(gh-19355)
ndim
和axis
属性已添加到numpy.AxisError
ndim
和axis
参数现在也作为每个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.floating
和numpy.integer
基于 Python 中float
和int
的对应物,numpy 浮点和整数类型现在支持float.is_integer
。如果数字是有限的整数值,则返回True
,否则返回False
。
>>> 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)
ndarray
,dtype
和number
现在可以在运行时进行下标访问
模仿PEP 585,numpy.ndarray
、numpy.dtype
和numpy.number
类现在可以在 Python 3.9 及更高版本中进行下标操作。因此,以前只允许在.pyi 存根文件中或借助from __future__ import annotations
的帮助下的表达式现在也在运行时合法。
>>> 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_normal
和smallest_subnormal
属性
属性smallest_normal
和smallest_subnormal
作为任何浮点数据类型的finfo
类的扩展可用。要使用这些新属性,写np.finfo(np.float64).smallest_normal
或np.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)
添加了quantile
和percentile
的新方法
quantile
和percentile
现在有一个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.testing
、numpy.linalg
和numpy.random
(自 1.21 版本起可用)。
(gh-20217)
使用 AVX-512 对 umath 模块进行矢量化
通过利用英特尔短向量数学库(SVML),18 个 umath 函数(exp2
、log2
、log10
、expm1
、log1p
、cbrt
、sin
、cos
、tan
、arcsin
、arccos
、arctan
、sinh
、cosh
、tanh
、arcsinh
、arccosh
、arctanh
)使用 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_normal
和smallest_subnormal
属性添加到finfo
属性smallest_normal
和smallest_subnormal
作为任何浮点数据类型的finfo
类的扩展可用。要使用这些新属性,请写np.finfo(np.float64).smallest_normal
或np.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)
为quantile
和percentile
添加新方法
quantile
和percentile
现在有一个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.testing
、numpy.linalg
和numpy.random
(自 1.21 版本起可用)。
(gh-20217)
使用 AVX-512 对 umath 模块进行矢量化
通过利用英特尔短向量数学库(SVML),18 个 umath 函数(exp2
、log2
、log10
、expm1
、log1p
、cbrt
、sin
、cos
、tan
、arcsin
、arccos
、arctan
、sinh
、cosh
、tanh
、arcsinh
、arccosh
、arctanh
)使用 AVX-512 指令集进行矢量化,适用于单精度和双精度实现。此更改目前仅适用于 Linux 用户和具有 AVX-512 指令集的处理器。对于单精度和双精度函数,平均加速比分别为 32 倍和 14 倍。
(gh-19478)
OpenBLAS v0.3.18
更新测试和轮子中使用的 OpenBLAS 至 v0.3.18
(gh-20058)