números inteiros espaçados logaritmicamente

Digamos que eu tenha um vetor de 10.000 pt que eu queira pegar uma fatia de apenas 100 pontos logaritmicamente espaçados. Eu quero uma função para me dar valores inteiros para os índices. Aqui está uma solução simples que está simplesmente usando em torno de + espaço de logs e, em seguida, se livrando de duplicatas.

def genLogSpace( array_size, num ):
    lspace = around(logspace(0,log10(array_size),num)).astype(uint64)
    return array(sorted(set(lspace.tolist())))-1

ls=genLogspace(1e4,100)

print ls.size
>>84
print ls
array([   0,    1,    2,    3,    4,    5,    6,    7,    8,    9,   10,
         11,   13,   14,   15,   17,   19,   21,   23,   25,   27,   30,
         33,   37,   40,   44,   49,   54,   59,   65,   71,   78,   86,
         94,  104,  114,  125,  137,  151,  166,  182,  200,  220,  241,
        265,  291,  319,  350,  384,  422,  463,  508,  558,  613,  672,
        738,  810,  889,  976, 1071, 1176, 1291, 1416, 1555, 1706, 1873,
       2056, 2256, 2476, 2718, 2983, 3274, 3593, 3943, 4328, 4750, 5213,
       5721, 6279, 6892, 7564, 8301, 9111, 9999], dtype=uint64)

Observe que havia 16 duplicatas, então agora só tenho 84 pontos.

Alguém tem uma solução que garantirá eficientemente que o número de amostras de saída seja numérico? Para este exemplo específico, os valores de entrada para num de 121 e 122 fornecem 100 pontos de saída.

questionAnswers(3)

yourAnswerToTheQuestion