How to generate exponentially increasing range in Python

If you consider numpy as one of the standards ;), you may use numpy.logspace since that is what it is supposed to do.... (note: 100=10^2, 1000000000=10^9)

for n in numpy.logspace(2,9,num=9-2, endpoint=False):
    test(n)

example 2 (note: 100=10^2, 1000000000=10^9, want to go at a step 10x, it is 9-2+1 points...):

In[14]: np.logspace(2,9,num=9-2+1,base=10,dtype='int')
Out[14]: 
array([       100,       1000,      10000,     100000,    1000000,
         10000000,  100000000, 1000000000])

example 3:

In[10]: np.logspace(2,9,dtype='int')
Out[10]: 
array([       100,        138,        193,        268,        372,
              517,        719,       1000,       1389,       1930,
             2682,       3727,       5179,       7196,      10000,
            13894,      19306,      26826,      37275,      51794,
            71968,     100000,     138949,     193069,     268269,
           372759,     517947,     719685,    1000000,    1389495,
          1930697,    2682695,    3727593,    5179474,    7196856,
         10000000,   13894954,   19306977,   26826957,   37275937,
         51794746,   71968567,  100000000,  138949549,  193069772,
        268269579,  372759372,  517947467,  719685673, 1000000000])

on your case, we use endpoint=False since you want not to include the endpoint... (e.g. np.logspace(2,9,num=9-2, endpoint=False) )


Why not

for exponent in range(2, 10):
    test(10 ** exponent)

if I'm reading your intent right.


The simplest thing to do is to use a linear sequence of exponents:

for e in range(1, 90):
    i = int(10**(e/10.0))
    test(i)

You can abstract the sequence into its own generator:

def exponent_range(max, nsteps):
    max_e = math.log10(max)
    for e in xrange(1, nsteps+1):
        yield int(10**(e*max_e/nsteps))

for i in exponent_range(10**9, nsteps=100):
    test(i)

To produce the same numbers as your code:

numbers_sizes = (i*10**exp for exp in range(2, 9) for i in range(1, 10))
for n in numbers_sizes:
    test(n)

Tags:

Python