# How to make an arithmetic progression in NumPy (Python)

The NumPy arange() is almost the same as the Python range. The arange() returns an arithmetic progression.

import numpy

a1 = numpy.arange(3)
a2 = numpy.arange(7)
a3 = numpy.arange(2, 5)

print(a1)  # [0 1 2]
print(a2)  # [0 1 2 3 4 5 6]
print(a3)  # [2 3 4]


If there is one argument, it simply returns the integers from 0 to n-1. If the function has two arguments (m, n), it returns from m to n-1.

## Step

Here are arithmetic progressions with step three:

import numpy

a1 = numpy.arange(2, 20, 3)
a2 = numpy.arange(2, 21, 3)
a3 = numpy.arange(2, 22, 3)
a4 = numpy.arange(2, 23, 3)
a5 = numpy.arange(2, 24, 3)

print(a1)  # [ 2  5  8 11 14 17]
print(a2)  # [ 2  5  8 11 14 17 20]
print(a3)  # [ 2  5  8 11 14 17 20]
print(a4)  # [ 2  5  8 11 14 17 20]
print(a5)  # [ 2  5  8 11 14 17 20 23]


The third argument is the step of progression. The second argument is the max of progression, not the last value of progression.

## Arange of decimal step

import numpy

a = numpy.arange(3, 7, 0.1)

print(a)
# [3.  3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.  4.1 4.2 4.3 4.4 4.5 4.6 4.7
#  4.8 4.9 5.  5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.  6.1 6.2 6.3 6.4 6.5
#  6.6 6.7 6.8 6.9]


Let's draw the curve by that technique.

import numpy
from matplotlib import pyplot

x = numpy.arange(-5, 20, 0.1)
y = numpy.array([a * a for a in x])

pyplot.plot(x, y)
pyplot.savefig('plot.jpg')


## arange() and linspace()

import numpy

a = numpy.arange(1, 3, 0.1)
b = numpy.linspace(1, 3, 21)

print(a)
# [1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.  2.1 2.2 2.3 2.4 2.5 2.6 2.7
#  2.8 2.9]

print(b)
# [1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.  2.1 2.2 2.3 2.4 2.5 2.6 2.7
#  2.8 2.9 3. ]


arange() and linspace() are similar. linspace() takes the start, stop, and number of samples. In the above exmample, the function generates 21 values and those contain the start and stop value (1 and 3).