如何在Python中生成指数增长范围

2024-04-25 21:46:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用指数增长的值测试一些代码的性能。因此,当一个额外的数字被加到数字的大小时,增量乘以10。到目前为止我就是这样做的,但看起来有点老套。不引进非标准图书馆的改进建议?

numbers_size = 100
increment = 100
numbers_range = 1000000000
while numbers_size < numbers_range:
    t = time.time()
    test( numbers_size )
    taken_t = time.time() - t
    print numbers_size, test, taken_t

    increment = 10 ** (len(str(numbers_size))-1)
    numbers_size += increment

Tags: 代码testsizetimerange数字指数性能
3条回答

如果您将numpy视为标准之一;,那么您可以使用numpy.logspace,因为这正是它应该做的。。。。(注:100=10^2,100000000=10^9)

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

例2(注:100=10^2,1000000000=10^9,要在步骤10x处进行,它是9-2+1点…):

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])

例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])

在您的案例中,我们使用endpoint=False,因为您不希望包含端点。。。(例如np.logspace(2,9,num=9-2, endpoint=False)

为什么不

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

如果我读对了你的意图。

要生成与代码相同的数字:

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

相关问题 更多 >