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.仅用于数组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.由于类型转换或当 start 远大于 step 时使用浮点数,可能会在这里发生精度损失.这可能导致意外行为.例如:

>>> 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])