対数的に間隔を空けた100点のみのスライスを取得したい10,000ポイントのベクトルがあるとします。インデックスの整数値を取得する関数が必要です。これは、単純に+ログスペースを使用し、重複を取り除く単純なソリューションです。
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ポイントしかないことに注意してください。
出力サンプルの数がnumであることを効率的に保証するソリューションを誰かが持っていますか?この特定の例では、121と122のnumの入力値は、100の出力ポイントを提供します。