flopscope.

flopscope.numpy.arange

fnp.arange(*args, **kwargs)[flopscope source]

Return evenly spaced values within a given interval.

Adapted from NumPy docs np.arange

Areacore
Typecustom
NumPy Refnp.arange
Cost
per-operation
Flopscope Context

Return evenly spaced values in given interval. Cost: numel(output).

arange can be called with a varying number of positional arguments:

For integer arguments the function is roughly equivalent to the Python built-in range, but returns an ndarray rather than a range instance.

When using a non-integer step, such as 0.1, it is often better to use flops.linspace.

See the Warning sections below for more information.

Parameters

start:integer or real, optional

Start of interval. The interval includes this value. The default start value is 0.

stop:integer or real

End of interval. The interval does not include this value, except in some cases where step is not an integer and floating point round-off affects the length of out.

step:integer or real, optional

Spacing between values. For any output out, this is the distance between two adjacent values, out[i+1] - out[i]. The default step size is 1. If step is specified as a position argument, start must also be given.

dtype:dtype, optional

The type of the output array. If dtype is not given, infer the data type from the other input arguments.

device:str, optional

The device on which to place the created array. Default: None. For Array-API interoperability only, so must be "cpu" if passed.

Added in version 2.0.0.
like:array_like, optional

Reference object to allow the creation of arrays which are not NumPy arrays. If an array-like passed in as like supports the __array_function__ protocol, the result will be defined by it. In this case, it ensures the creation of an array object compatible with that passed in via this argument.

Added in version 1.20.0.

Returns

arange:ndarray

Array of evenly spaced values.

For floating point arguments, the length of the result is ceil((stop - start)/step). Because of floating point overflow, this rule may result in the last element of out being greater than stop.

See also

Warnings

The length of the output might not be numerically stable.

Another stability issue is due to the internal implementation of flops.arange. The actual step value used to populate the array is dtype(start + step) - dtype(start) and not step. Precision loss can occur here, due to casting or due to using floating points when start is much larger than step. This can lead to unexpected behaviour. For example:

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

In such cases, the use of flops.linspace should be preferred.

The built-in range generates :std:doc:`Python built-in integers that have arbitrary size <python:c-api/long>`, while flops.arange produces flops.int32 or flops.int64 numbers. This may result in incorrect results for large integer values:

system_message
<string>:18: (INFO/1) No role entry for "std:doc" in module "docutils.parsers.rst.languages.en".
Trying "std:doc" as canonical role name.
system_message
<string>:18: (ERROR/3) Unknown interpreted text role "std:doc".
>>> power = 40
>>> modulo = 10000
>>> x1 = [(n ** power) % modulo for n in range(8)]
>>> x2 = [(n ** power) % modulo for n in flops.arange(8)]
>>> print(x1)
[0, 1, 7776, 8801, 6176, 625, 6576, 4001]  # correct
>>> print(x2)
[0, 1, 7776, 7185, 0, 5969, 4816, 3361]  # incorrect

Examples

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