[SciPy-user] linspace
Alan G Isaac
aisaac at american.edu
Mon Dec 5 01:09:53 EST 2005
>>> S.linspace(0,1,2.5)
array([ 0. , 0.66666667, 1.33333333])
>>> S.linspace(0,1,1)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "C:\Python24\lib\site-packages\scipy\base\function_base.py", line 91, in
linspace
step = (stop-start)/float((num-1))
ZeroDivisionError: float division
While this is just an abuse and a corner case, both of these are odd.
Therefore I suggest a new definition:
def linspace(start,stop,num=50,endpoint=True,retstep=False):
"""Evenly spaced numbers.
Return an array of int(num) evenly spaced numbers from start to stop.
If endpoint==True, then last sample is stop.
If retstep==True, then also return the step value used.
"""
num = int(num)
if num <= 0:
return array([])
if endpoint:
if num == 1:
return array([stop])
step = (stop-start)/float(num-1)
else:
step = (stop-start)/float(num)
y = _nx.arange(0,num) * step + start
if retstep:
return y, step
else:
return y
Alan Isaac
P.S. Here is the current definition:
def linspace(start,stop,num=50,endpoint=1,retstep=0):
""" Evenly spaced samples.
Return num evenly spaced samples from start to stop. If endpoint=1 then
last sample is stop. If retstep is 1 then return the step value used.
"""
if num <= 0: return array([])
if endpoint:
step = (stop-start)/float((num-1))
y = _nx.arange(0,num) * step + start
else:
step = (stop-start)/float(num)
y = _nx.arange(0,num) * step + start
if retstep:
return y, step
else:
return y
More information about the SciPy-User
mailing list