Сначала давайте пропустим сложность шага с плавающей запятой и используем простые целые числа start и stop:
In [141]: np.arange(0,5)
Out[141]: array([0, 1, 2, 3, 4])
In [142]: np.arange(0,5, dtype=int)
Out[142]: array([0, 1, 2, 3, 4])
In [143]: np.arange(0,5, dtype=float)
Out[143]: array([0., 1., 2., 3., 4.])
In [144]: np.arange(0,5, dtype=complex)
Out[144]: array([0.+0.j, 1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j])
In [145]: np.arange(0,5, dtype='datetime64[D]')
Out[145]:
array(['1970-01-01', '1970-01-02', '1970-01-03', '1970-01-04',
'1970-01-05'], dtype='datetime64[D]')
Даже bool
работают, в пределах определенного диапазона:
In [149]: np.arange(0,1, dtype=bool)
Out[149]: array([False])
In [150]: np.arange(0,2, dtype=bool)
Out[150]: array([False, True])
In [151]: np.arange(0,3, dtype=bool)
ValueError: no fill-function for data-type.
In [156]: np.arange(0,3).astype(bool)
Out[156]: array([False, True, True])
Есть 2 возможных логических значения, поэтому запрос большего должен привести к некоторой ошибке.
arange
- это скомпилированный код, поэтому мы не можем легко изучить его логику (но вы можете искать код C на github).
Примеры показывают, что он в некотором смысле преобразовывает параметры в соответствующий dtype
и выполняет итерацию для этого. Он не просто генерирует диапазон и в конце преобразует его в dtype.