Спасибо за вашу помощь.
Я делаю выборку инверсии 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?