2013-05-14 19 views
5

Użyłem funkcji arange NumPy, aby uczynić w następującym zakresie:numpy.arange dzielenie przez zero błędu

a = n.arange(0,5,1/2) 

Zmienna ta działa dobrze przez siebie, ale gdy próbuję umieszczenie go w dowolnym miejscu w moim scenariuszu pojawia się błąd który mówi

ZeroDivisionError: division by zero

+4

Twoje stepsize wynosi zero. Zobacz, co "1/2" ocenia. – askewchan

+1

@askewchan: To zależy od wersji Pythona. Zobacz odpowiedź Roba poniżej. –

+0

Masz poprawne @honk. Byłbym bardzo zaskoczony, widząc ten błąd w pythonie 3, więc założyłem, że OP używa Pythona 2. – askewchan

Odpowiedz

5

pierwszy, step ocenia na zero (na Pythona 2.x to jest). Po drugie, możesz chcieć sprawdzić np.linspace, jeśli chcesz użyć kroku niecałkowitego.

Docstring: 
arange([start,] stop[, step,], dtype=None) 

Return evenly spaced values within a given interval. 

[...] 

When using a non-integer step, such as 0.1, the results will often not 
be consistent. It is better to use ``linspace`` for these cases. 

In [1]: import numpy as np 

In [2]: 1/2 
Out[2]: 0 

In [3]: 1/2. 
Out[3]: 0.5 

In [4]: np.arange(0, 5, 1/2.) # use a float 
Out[4]: array([ 0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5]) 
2

Jeśli nie używasz nowszej wersji Pythona (3.1 lub nowszy myślę) wyrażenie 1/2 ocenia na zero, ponieważ zakładając podział całkowitej.

Możesz to naprawić, zastępując 1/2 wartościami 1./2 lub 0.5 lub umieszczając from __future__ import division u góry skryptu.

Powiązane problemy