Как оптимизировать инверсионную выборку с использованием тензорного потока? - PullRequest
0 голосов
/ 19 ноября 2018

Спасибо за вашу помощь.

Я делаю выборку инверсии CDF.

Алгоритм показан ниже.


ㆍ Ввод: A = [78,226, 344, 425, 473, 495, 506, 510, 511]

ㆍ Выберите случайную целочисленную матрицу rnd [i] [j].// 0 <= rnd <512, i = 536, j = 256 </p>

ㆍ Найти наименьшее целое число S = индекс A [k], такой что rnd [i] [j] <= A [k] // 0 <= k <длина A </p>

ㆍ вывода: S [i] [j] // тип uint16

Я делаю код ниже, чтобы использовать тензор потока.

rnd=tf.random_uniform([536, 256], minval=0, maxval=512, dtype=tf.int32, seed=None, name=None) 

cdf1=tf.fill([536, 256], 8)
r1=tf.where(tf.less(rnd, 511), cdf1-1, cdf1)
r2=tf.where(tf.less(rnd, 507), cdf1-2, r1)
r3=tf.where(tf.less(rnd, 496), cdf1-3, r2)
r4=tf.where(tf.less(rnd, 474), cdf1-4, r3)
r5=tf.where(tf.less(rnd, 426), cdf1-5, r4)
r6=tf.where(tf.less(rnd, 345), cdf1-6, r5)
r7=tf.where(tf.less(rnd, 227), cdf1-7, r6)
r8=tf.where(tf.less(rnd, 79), cdf1-8, r7)

S=tf.cast(r8, tf.uint16)

Но это слишком медленно.

Как быстро вычислить S?

...