Bucketize настоящий ценный Тензор - PullRequest
1 голос
/ 21 июня 2019

У меня есть такая матрица:

tf_ent = tf.Variable([   [9.96,    8.65,    0.8,    0.1 ],
                         [0.7,     8.33,    0  ,    0   ],
                         [0.9,     0,       6,      7.33],
                         [6.60,    0,       3,      5.5 ],
                         [9.49,    0.,      0,      0   ],
                         [0.4,     8.45,    0,      0.2 ],
                         [0.3,     0,       5.82,   8.28]])

Я хочу получить вывод, в котором вес в том же диапазоне получает тот же number.

Другими словами, это число является хорошим представителем weight range в матрице.

Итак, мой идеальный вывод может быть примерно таким:

                [[5,    5,    1,    1],
                 [1,    5,    0,    0],
                 [1,    0,    6,    5],
                 [4,    0,    2,    3],
                 [5,    0.,   0,    0],
                 [1,    5,    0,    1],
                 [1,    0,    3,    5]]

В этом случае я сопоставил это условие (считайте, что у меня есть мое сопоставление):

range(0.1, 1) -> 1
range( 1, 3) -> 2
range( 3, 5) -> 3
range(5, 7) -> 4
range (7, 10) -> 5

сначала я попробовал с tf.histogram_fixed_width_bins, но это не дало мне ожидаемого результата: это мой код:

value_ranges = [0, 10.0]
nbins = 5
new_f_w_t = tf.histogram_fixed_width_bins(tf_ent, value_ranges, nbins)
print(new_f_w_t)

и это вывод этого кода:

output= [[4 4 0 0]
        [0 4 0 0]
        [0 0 3 3]
        [3 0 1 2]
        [4 0 0 0]
        [0 4 0 0]
        [0 0 2 4]]

выводит больше как получение эквивалентного целого числа этих чисел с плавающей запятой, а не с учетом какого-либо диапазона.

Как эффективно получить динамическое отображение матрицы?

Заранее спасибо:)

1 Ответ

1 голос
/ 21 июня 2019

Это эквивалентно операции np.digitize. Вы можете использовать math_ops._bucketize:

from tensorflow.python.ops import math_ops

bins = [0.1, 1, 3, 5, 7, 10]
new_f_w_t = math_ops._bucketize(tf_ent, boundaries=bins)

new_f_w_t.numpy()
array([[5, 5, 1, 1],
       [1, 5, 0, 0],
       [1, 0, 4, 5],
       [4, 0, 3, 4],
       [5, 0, 0, 0],
       [1, 5, 0, 1],
       [1, 0, 4, 5]], dtype=int32)
...