numpy.arange#

numpy.arange([start, ]stop, [step, ]dtype=None, *, device=None, like=None)#

在给定区间内返回均匀间隔的值。

arange 可以用不同的位置参数调用

  • arange(stop):在半开区间 [0, stop) 内生成值(换句话说,包含 start 但不包括 stop 的区间)。

  • arange(start, stop):在半开区间 [start, stop) 内生成值。

  • arange(start, stop, step) 在半开区间 [start, stop) 内生成值,值之间的间距由 step 给定。

对于整数参数,该函数大致等效于 Python 内置的 range,但返回 ndarray 而不是 range 实例。

当使用非整数步长(例如 0.1)时,通常最好使用 numpy.linspace

有关更多信息,请参见下面的“警告”部分。

参数:
start整数或实数,可选

区间的开始。区间包含此值。默认起始值为 0。

stop整数或实数

区间的结束。区间不包含此值,但在某些情况下,当 step 不是整数并且浮点舍入影响 out 的长度时,除外。

step整数或实数,可选

值之间的间距。对于任何输出 out,这是两个相邻值之间的距离,out[i+1] - out[i]。默认步长为 1。如果 step 指定为位置参数,则也必须给出 start

dtypedtype,可选

输出数组的类型。如果未给出 dtype,则从其他输入参数推断数据类型。

devicestr,可选

放置创建数组的设备。默认值:None。仅用于 Array-API 互操作性,因此如果传递,则必须为 "cpu"

版本 2.0.0 中的新功能。

likearray_like,可选

参考对象,允许创建不是 NumPy 数组的数组。如果作为 like 传入的类数组支持 __array_function__ 协议,则结果将由其定义。在这种情况下,它确保创建与通过此参数传入的数组对象兼容的数组对象。

版本 1.20.0 中的新功能。

返回值:
arangendarray

均匀间隔值的数组。

对于浮点参数,结果的长度为 ceil((stop - start)/step)。由于浮点溢出,此规则可能会导致 out 的最后一个元素大于 stop

警告

输出的长度可能在数值上不稳定。

另一个稳定性问题是由于 numpy.arange 的内部实现造成的。用于填充数组的实际步长值为 dtype(start + step) - dtype(start),而不是 step。由于强制转换或在 startstep 大得多时使用浮点数,因此此处可能会发生精度损失。这可能导致意外行为。例如

>>> np.arange(0, 5, 0.5, dtype=int)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
>>> np.arange(-3, 3, 0.5, dtype=int)
array([-3, -2, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8])

在这种情况下,应优先使用 numpy.linspace

内置的 range 生成 具有任意大小的 Python 内置整数,而 numpy.arange 生成 numpy.int32numpy.int64 数字。这可能会导致大型整数值出现错误的结果

>>> power = 40
>>> modulo = 10000
>>> x1 = [(n ** power) % modulo for n in range(8)]
>>> x2 = [(n ** power) % modulo for n in np.arange(8)]
>>> print(x1)
[0, 1, 7776, 8801, 6176, 625, 6576, 4001]  # correct
>>> print(x2)
[0, 1, 7776, 7185, 0, 5969, 4816, 3361]  # incorrect

另请参阅

numpy.linspace

小心处理端点的均匀间隔数字。

numpy.ogrid

N 维均匀间隔数字的数组。

numpy.mgrid

N 维均匀间隔数字的网格状数组。

如何创建具有规则间隔值的数组

示例

>>> import numpy as np
>>> np.arange(3)
array([0, 1, 2])
>>> np.arange(3.0)
array([ 0.,  1.,  2.])
>>> np.arange(3,7)
array([3, 4, 5, 6])
>>> np.arange(3,7,2)
array([3, 5])