логарифмически расставленные целые числа
Скажем, у меня есть вектор из 10000 пт, который я хочу взять срез только из 100 логарифмически разнесенных точек. Я хочу, чтобы функция давала мне целочисленные значения для индексов. Вот'Это простое решение, которое просто использует + logspace, а затем избавляется от дубликатов.
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)
Обратите внимание, что было 16 дубликатов, так что теперь у меня всего 84 очка.
У кого-нибудь есть решение, которое будет эффективно обеспечивать количество выходных выборок? Для этого конкретного примера входные значения для чисел 121 и 122 дают 100 выходных точек.