NumPy 1.23.1 是一个维护版本,修复了 1.23.0 发布后发现的错误。值得注意的修复包括:
本次发布支持的 Python 版本为 3.8-3.10。
本次发布共有 7 位贡献者。名字后��有“+”符号的人第一次为此贡献了补丁。
本次发布共合并了 8 个拉取请求。
np.average
的归一化过程中使用keepdims
…
np.loadtxt
中max_rows
行为的更改
本次发布共有 7 位贡献者。名字后带有“+”符号的人第一次为此贡献了补丁。
本次发布共合并了 8 个拉取请求。
np.average
的归一化过程中使用keepdims
…
np.loadtxt
中max_rows
行为的更改
NumPy 1.23.0 版本持续改进处理和提升数据类型(dtypes)的工作,提高执行速度,澄清文档,并废弃旧的弃用功能。亮点包括:
loadtxt
,大大提高了其性能。
详细信息如下,
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)
crackfortran
解析器现在可以理解模块中的运算符和赋值定义。它们被添加到模块的body
列表中,其中包含一个新键implementedby
,列出了实现运算符或赋值的子例程或函数的名称。
(gh-15006)
因此,不需要使用public
或private
语句来指定派生类型的访问属性。
(gh-15844)
genfromtxt
中添加了新参数ndmin
此参数与numpy.loadtxt
中的ndmin
的行为相同。
(gh-20500)
np.loadtxt
现在支持引号字符和单个转换函数numpy.loadtxt
现在支持额外的quotechar
关键字参数,默认未设置。使用quotechar='"'
将读取 Excel CSV 方言中使用的带引号字段。
此外,现在可以传递单个可调用对象而不是字典作为converters
参数。
(gh-20580)
以前,查看具有不同项大小的 dtype 的数组需要整个数组是 C 连续的。这种限制会不必要地强迫用户在能够更改 dtype 之前对非连续数组进行连续复制。
此更改不仅影响ndarray.view
,还影响其他构造机制,包括不鼓励直接对ndarray.dtype
进行赋值。
此更改取消了关于查看 F 连续数组的弃用,其他地方在发布说明中有描述。
(gh-20722)
对于 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)
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)
一般来说,NumPy 现在为结构化 dtype 定义了正确但略有限制的提升,通过提升每个字段的子类型而不是引发异常:
>>> 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 启用,Power ISA 3.1 中提供的新指令可用于加速一些 NumPy 操作,例如 floor_divide、modulo 等。
(gh-20821)
np.fromiter
现在接受对象和子数组numpy.fromiter
函数现在支持对象和子数组的数据类型。请参阅函数文档以获取示例。
(gh-20993)
编译之前会进行检测阶段,以确定底层 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 标量上的操作现在显着更快,尽管在某些情况下,稀有操作(例如使用 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)
crackfortran
解析器现在了解模块中的运算符和赋值定义。它们被添加到包含新键implementedby
的模块的body
列表中,该键列出了实现运算符或赋值的子例程或函数的名称。
(gh-15006)
因此,不需要使用public
或private
语句来指定派生类型的访问属性。
(gh-15844)
genfromtxt
中添加了新参数ndmin
此参数的行为与numpy.loadtxt
中的ndmin
相同。
(gh-20500)
np.loadtxt
现在支持引号字符和单个转换函数numpy.loadtxt
现在支持额外的quotechar
关键字参数,默认未设置。使用quotechar='"'
将读取 Excel CSV 方言中使用的带引号的字段。
此外,现在可以传递单个可调用对象而不是字典给converters
参数。
(gh-20580)
以前,查看具有不同项大小的 dtype 的数组需要整个数组是 C 连续的。这种限制会不必要地强迫用户在能够更改 dtype 之前对非连续数组进行连续复制。
此更改不仅影响ndarray.view
,还影响其他构造机制,包括不鼓励直接对ndarray.dtype
进行赋值。
此更改取消了关于查看 F 连续数组的弃用,其他地方在发布说明中有描述。
(gh-20722)
对于 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
解析器现在理解模块中的运算符和赋值定义。它们被添加到包含新键 implementedby
的模块的 body
列表中,列出了实现运算符或赋值的子例程或函数的名称。
(gh-15006)
因此,不需要使用 public
或 private
语句来指定派生类型的访问属性。
(gh-15844)
genfromtxt
添加了新参数 ndmin
该参数的行为与 numpy.loadtxt
中的 ndmin
相同。
(gh-20500)
np.loadtxt
现在支持引号字符和单个转换函数numpy.loadtxt
现在支持额外的 quotechar
关键字参数,默认未设置。使用 quotechar='"'
将读取 Excel CSV 方言中使用的带引号的字段。
此外,现在可以传递单个可调用对象而不是字典作为 converters
参数。
(gh-20580)
以前,查看具有不同项大小的 dtype 的数组需要整个数组是 C 连续的。这种限制会不必要地强迫用户在能够更改 dtype 之前对非连续数组进行连续复制。
此更改不仅影响 ndarray.view
,还影响其他构造机制,包括不鼓励直接赋值给 ndarray.dtype
。
此更改终止了关于查看 F 连续数组的弃用,其他地方在发布说明中有描述。
(gh-20722)
对于 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)
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)
一般来说,NumPy 现在通过提升每个字段的子类型而不是引发异常来定义结构化 dtype 的正确但略有限制的提升:
>>> 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)
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)
总的来说,NumPy 现在通过提升每个字段的子类型而不是引发异常来定义正确但略有限制的结构化 dtype 的提升:
>>> 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,Power ISA 3.1 中可用的新指令可以用于加速一些 NumPy 操作,例如,floor_divide,modulo 等。
(gh-20821)
np.fromiter
现在接受对象和子数组numpy.fromiter
函数现在支持对象和子数组数据类型。请参阅函数文档以获取示例。
(gh-20993)
编译之前会进行检测阶段,以确定底层的 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 启用,Power ISA 3.1 中可用的新指令可以用于加速一些 NumPy 操作,例如,floor_divide,modulo 等。
(gh-20821)
np.fromiter
现在接受对象和子数组numpy.fromiter
函数现在支持对象和子数组数据类型。请查看函数文档以获取示例。
(gh-20993)
编译之前会进行检测阶段,以确定底层的 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 标量的操作现在显着更快,尽管在某些情况下,一些罕见的操作(例如使用 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 标量的操作现在显着更快,尽管在某些情况下,一些罕见的操作(例如使用 0-D 数组而不是标量)可能会更慢。然而,即使有了这些改进,希望为其标量获得最佳性能的用户,可能希望使用scalar.item()
将已知的 NumPy 标量转换为 Python 标量。
(gh-21188)
np.kron
numpy.kron
现在快了约 80%,因为产品现在是使用广播计算的。
(gh-21354)
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 人为这个版本做出了贡献。名字后面带有“+”的人第一次为此版本贡献了补丁。
总共有 22 个拉取请求合并到了这个版本中。
np.lib.stride_tricks
在…下重新导出
numpy._typing
中的类型
no_sanitize("alignment")
标记npy_memchr
总共有 12 人为这个版本做出了贡献。名字后面带有“+”符号的人第一次为补丁做出了贡献。
总共有 22 个拉取请求被合并到这个版本中。
np.lib.stride_tricks
重新导出的问题…
numpy._typing
中的类型
no_sanitize("alignment")
标记 npy_memchr
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 位贡献者。名字后带有“+”的人第一次为该版本贡献了补丁。
本次发布共合并了 10 个拉取请求。
np.concatenate
中的数组类序列
本次发布共有 9 位贡献者。名字后带有“+”的人第一次为该版本贡献了补丁。
本次发布共合并了 10 个拉取请求。
np.concatenate
中的数组类序列
NumPy 1.22.2 是一个维护版本,修复了 1.22.1 发布后发现的错误。值得注意的修复包括:
本次发布支持的 Python 版本为 3.8-3.10。
本次发布共有 14 人贡献。名字后带有“+”符号的人是第一次贡献补丁。
本次发布共合并了 21 个拉取请求。
real
和imag
的问题…
numpy.distutils
np.vectorize
的返回类型
flatiter.__setitem__
添加注释
fromnumeric.pyi
中添加了缺失的 where 类型提示
-Wsometimes-uninitialized
的代码。
总共有 14 人为这个版本做出了贡献。名字后面带有“+”符号的人第一次贡献了一个补丁。
总共有 21 个拉取请求被合并到这个版本中。
real
和 imag
的问题…
numpy.distutils
np.vectorize
的返回类型
flatiter.__setitem__
添加注释
fromnumeric.pyi
中添加缺失的 where 类型提示
-Wsometimes-uninitialized
的代码。
NumPy 1.22.1 是一个维护版本,修复了在 1.22.0 发布后发现的 bug。值得注意的修复包括:
本次发布支持的 Python 版本为 3.8-3.10。
总共有 14 位贡献者为此版本做出了贡献。名字旁边带有“+”的人第一次为补丁做出了贡献。
总共有 20 个拉取请求合并到此版本中。
__array_namespace__
的类型注解更改为 ModuleType
ndindex
接受整数元组
date
和timedelta
…
ndarray.__array_finalize__
的类型
array_api.argsort(descending=True)
尊重相对…
array_api
中的幂相关函数接受整数输入
本次发布共有 14 位贡献者。名字后带有“+”的人第一次为补丁做出了贡献。
本次发布共合并了 20 个拉取请求。
__array_namespace__
的类型注释更改为 ModuleType
ndindex
接受整数元组
date
和 timedelta
…
ndarray.__array_finalize__
的类型
array_api.argsort(descending=True)
尊重相对…
array_api
中的 pow 相关函数接受整数输入
NumPy 1.22.0 是一个重要的发布版本,涵盖了来自 153 位贡献者的工作,分布在 609 个拉取请求中。有许多改进,重点包括:
quantile
、percentile
和相关函数的新方法。这些新方法提供了文献中常见的方法的完整集合。
除了为常用函数提供 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 链接,这应该解决那些使用真正巨大数组时遇到的偶发问题。
使用字符串 "Bytes0"
、"Datetime64"
、"Str0"
、"Uint32"
和 "Uint64"
作为 dtype 现在会引发 TypeError
。
(gh-19539)
loads
、ndfromtxt
和 mafromtxt
的弃用已过期numpy.loads
在 v1.15 中已弃用,建议用户改用 pickle.loads
。ndfromtxt
和 mafromtxt
在 v1.17 中都已弃用 - 用户应该改用 numpy.genfromtxt
,并使用适当的值作为 usemask
参数。
(gh-19615)
已将 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)
NumPy 现在在 clang 上设置了 -ftrapping-math
选项,以强制执行正确的浮点错误处理对于通用函数。否则,Clang 默认为非 IEEE 和 C99 兼容行为。这个更改(使用等效但更新的 -ffp-exception-behavior=strict
)在 NumPy 1.21 中尝试过,但实际上从未被使用。
(gh-19479)
复杂类型的 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 支持已被移除。这是相当严格的,有些更改需要 Python >= 3.8。
(gh-19665)
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 位浮点值的均匀分布中存在一个 bug,导致随机变量的最低有效位始终为 0。这个问题已经修复。
此更改影响由 random.Generator
方法 random
、standard_normal
、standard_exponential
和 standard_gamma
生成的变量,但仅当 dtype 指定为 numpy.float32
时。
(gh-20314)
掩码内部循环选择器现在不再使用。在极少数情况下自定义时会发出警告。
我们不希望任何代码使用这个功能。如果您确实使用了它,必须在更新的 NumPy 版本上取消选择器。还请联系 NumPy 开发人员,我们预计会提供一种新的、更具体的机制。
定制是一个从未实现的功能的一部分,允许更快的掩码操作。
(gh-19259)
新的头文件 experimental_public_dtype_api.h
允许尝试未来的 API,以改进通用函数和特别是用户 DType 的支持。此时建议使用 NumPy 的开发版本进行实验,因为预计会有一些变化,并且将解锁新功能。
(gh-19919)
如 NEP 49 中详细描述的那样,用于分配 ndarray 数据段的函数可以更改。策略可以在全局或上下文中设置。有关更多信息,请参阅 NEP 和 NumPy 中的内存管理 参考文档。还添加了 NUMPY_WARN_IF_NO_MEM_POLICY
覆盖,以警告在设置 NPY_ARRAY_OWNDATA
时危险地转移所有权的使用。
(gh-17582)
作为 numpy.array_api
添加了 NEP 47(采用数组 API 标准)的初始实现。该实现是实验性的,并在导入时会发出 UserWarning,因为 数组 API 标准 仍处于草案状态。numpy.array_api
是数组 API 标准的符合实现,也是最小的,意味着只实现了标准要求的那些函数和行为(请参阅 NEP 了解更多信息)。鼓励希望使用数组 API 标准的库使用 numpy.array_api
来检查他们只使用了标准符合实现中保证存在的功能。
(gh-18585)
此功能在生成过程中依赖于 Doxygen,并且依赖于 Breathe 与 Sphinx 集成。
(gh-18884)
c_intp
精度。mypy 插件,在 numpy/numpy#17843 中引入,现已扩展:插件现在负责设置 numpy.ctypeslib.c_intp
的平台特定精度,后者用作各种 numpy.ndarray.ctypes
属性的数据类型。
没有插件,上述类型将默认为 ctypes.c_int64
。
要启用插件,必须将其添加到其 mypy 配置文件 中:
[mypy]
plugins = numpy.typing.mypy_plugin
(gh-19062)
添加了一个 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 是一种新的指令集,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)
在 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>
函数中:
initial
和 where
initial
和 where
keepdims
和 out
keepdims
和 out
initial
和 where
initial
和 where
where
where
where
(gh-20027)
从 1.20 版本开始,NumPy 库的部分部分已包含 PEP 484 类型注释;对剩余函数进行注释仍在进行中。随着 1.22 版本的发布,主要 NumPy 命名空间的这一过程已经完成,现在已完全注释。
除了主命名空间外,一些子包也包含注释。其中包括numpy.testing
、numpy.linalg
和numpy.random
(自 1.21 版本起可用)。
(gh-20217)
通过利用英特尔短向量数学库(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)
更新测试和 wheels 中使用的 OpenBLAS 至 v0.3.18
(gh-20058)
使用字符串"Bytes0"
, "Datetime64"
, "Str0"
, "Uint32"
, 和 "Uint64"
作为 dtype 现在会引发TypeError
错误。
(gh-19539)
loads
、ndfromtxt
和mafromtxt
的弃用已过期numpy.loads
在 v1.15 中已弃用,建议用户改用pickle.loads
。ndfromtxt
和mafromtxt
在 v1.17 中都已弃用 - 用户应该改用numpy.genfromtxt
,并使用适当的值作为usemask
参数。
(gh-19615)
使用字符串"Bytes0"
, "Datetime64"
, "Str0"
, "Uint32"
, 和 "Uint64"
作为 dtype 现在会引发TypeError
错误。
(gh-19539)
loads
、ndfromtxt
和mafromtxt
的弃用已过期numpy.loads
在 v1.15 中已被弃用,建议用户改用pickle.loads
。ndfromtxt
和mafromtxt
在 v1.17 中都已被弃用 - 用户应该改用numpy.genfromtxt
,并使用usemask
参数的适当值。
(gh-19615)
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)
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)
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 支持已被删除。这是相当严格的,有些更改需要 Python >= 3.8。
(gh-19665)
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)
存在一个 bug,即从均匀分布生成 32 位浮点值的最低有效位始终为 0。已修复此问题。
此更改影响由random.Generator
方法random
、standard_normal
、standard_exponential
和standard_gamma
生成的变量,但仅当 dtype 指定为numpy.float32
时。
(gh-20314)
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 支持已被移除。这是相当严格的,有些更改要求 Python >= 3.8。
(gh-19665)
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 位浮点值时存在 bug,导致随机变量的最低有效位始终为 0。已修复此问题。
此更改影响由random.Generator
方法random
、standard_normal
、standard_exponential
和standard_gamma
生成的变量,但仅当 dtype 指定为numpy.float32
时。
(gh-20314)
掩码内部循环选择器现在不再使用。在极少情况下,如果进行了自定义,将发出警告。
我们不希望任何代码使用此功能。如果您确实使用了,请在更新的 NumPy 版本上取消选择器。还请联系 NumPy 开发人员,我们预计会提供一种新的、更具体的机制。
自定义是一个从未实现的功能的一部分,旨在实现更快的掩码操作。
(gh-19259)
新的头文件experimental_public_dtype_api.h
允许尝试使用未来的 API 来改进通用函数,特别是用户 DType 的支持。目前建议使用 NumPy 的开发版本进行实验,因为预计会有一些变化并且将解锁新功能。
(gh-19919)
掩码内部循环选择器现在不再使用。在极少情况下,如果进行了自定义,将发出警告。
我们不希望任何代码使用此功能。如果您确实使用了,请在更新的 NumPy 版本上取消选择器。还请联系 NumPy 开发人员,我们预计会提供一种新的、更具体的机制。
自定义是一个从未实现的功能的一部分,旨在实现更快的掩码操作。
(gh-19259)
新的头文件experimental_public_dtype_api.h
允许尝试未来用于改进通用函数和特别是用户 DType 支持的 API。此时建议使用 NumPy 的开发版本进行实验,因为预计会有一些更改并将解锁新功能。
(gh-19919)
如NEP 49中详细说明,可以更改用于分配 ndarray 数据段的函数。策略可以在全局或上下文中设置。有关更多信息,请参阅 NEP 和 NumPy 中的内存管理参考文档。还添加了NUMPY_WARN_IF_NO_MEM_POLICY
覆盖,以警告通过设置NPY_ARRAY_OWNDATA
来传递所有权的危险用法。
(gh-17582)
NEP 47的初始实现(采用数组 API 标准)已添加为numpy.array_api
。该实现是实验性的,并在导入时会发出 UserWarning,因为数组 API 标准仍处于草案状态。numpy.array_api
是数组 API 标准的符合实现,也是最小的,意味着只实现了标准要求的那些函数和行为(详细信息请参阅 NEP)。鼓励希望使用数组 API 标准的库使用numpy.array_api
来检查他们只使用标准符合实现中保证存在的功能。
(gh-18585)
此功能依赖于Doxygen在生成过程中以及Breathe与 Sphinx 集成。
(gh-18884)
c_intp
精度mypy插件,引入自numpy/numpy#17843,再次被扩展:该插件现在负责设置numpy.ctypeslib.c_intp
的平台特定精度,后者被用作各种numpy.ndarray.ctypes
属性的数据类型。
没有插件,上述类型将默认为ctypes.c_int64
。
要启用插件,必须将其添加到其 mypy配置文件中:
[mypy]
plugins = numpy.typing.mypy_plugin
(gh-19062)
添加了一个 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)
在 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 中详细说明的,可以更改用于分配 ndarray 数据段的函数。策略可以在全局或上下文中设置。有关更多信息,请参阅 NEP 和 NumPy 中的内存管理 参考文档。还添加了一个 NUMPY_WARN_IF_NO_MEM_POLICY
覆盖,以警告危险的所有权转移设置 NPY_ARRAY_OWNDATA
。
(gh-17582)
NEP 47 的初始实现(采用数组 API 标准)已添加为 numpy.array_api
。该实现是实验性的,并将在导入时发出 UserWarning,因为 数组 API 标准 仍处于草案状态。numpy.array_api
是数组 API 标准的符合实现,也是最小的,意味着只实现了标准要求的那些功能和行为(请参阅 NEP 了解更多信息)。鼓励希望使用数组 API 标准的库使用 numpy.array_api
来检查他们只使用标准符合实现中保证存在的功能。
(gh-18585)
此功能依赖于 Doxygen 的生成过程和 Breathe 与 Sphinx 集成。
(gh-18884)
c_intp
精度在 numpy/numpy#17843 中引入的 mypy 插件再次扩展:插件现在负责设置 numpy.ctypeslib.c_intp
的特定于平台的精度,后者用作各种 numpy.ndarray.ctypes
属性的数据类型。
没有插件,上述类型将默认为 ctypes.c_int64
。
要启用插件,必须将其添加到其 mypy 配置文件 中:
[mypy]
plugins = numpy.typing.mypy_plugin
(gh-19062)
添加了一个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)
为了正确解析维度规范,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>
函数中:
initial
和where
initial
和where
keepdims
和out
keepdims
和out
initial
和where
initial
和where
where
where
where
(gh-20027)
从 1.20 版本开始,NumPy 库的部分部分已包含 PEP 484 类型注释;对其余函数进行注释仍在进行中。随着 1.22 版本的发布,主要 NumPy 命名空间的此过程已完成,现在已完全注释。
除主命名空间外,一些子包也包含注释。其中包括numpy.testing
、numpy.linalg
和numpy.random
(自 1.21 版本起可用)。
(gh-20217)
通过利用英特尔短向量数学库(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
(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>
函数中:
initial
& where
initial
& where
keepdims
& out
keepdims
& out
initial
& where
initial
& where
where
where
where
(gh-20027)
从 1.20 版本开始,NumPy 库的部分部分已包含 PEP 484 类型注释;对其余函数进行注释仍在进行中。随着 1.22 版本的发布,主要 NumPy 命名空间的这一过程已完成,现在已完全注释。
除主命名空间外,一些子包也包含注释。其中包括numpy.testing
、numpy.linalg
和numpy.random
(自 1.21 版本起可用)。
(gh-20217)
通过利用英特尔短向量数学库(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
(gh-20058)