У меня есть функция в numpy:
def modify_vec(old_config):
idx = np.where(old_config != 0)[0]
remove = np.random.choice(idx)
old_config[remove] -= 1
increase = np.random.randint(N)
old_config[increase] += 1
return old_config
, где на входе есть просто numpy вектор из N положительных целочисленных компонентов. Функция выполняет случайный выбор индекса вектора, в котором соответствующий элемент отличается от 0, затем уменьшает этот элемент на 1 и добавляет его к другому элементу, выбранному случайным образом.
Я хочусделать то же самое, используя Tensorflow (без вызова Session), где old_config - это постоянный тензор формы (1, N). У меня проблема в следующем. Я уже реализовал where в тензорном потоке следующим образом:
idx = tf.where(tf.logical_not(tf.math.equal(old_config, tf.constant(0, dtype=tf.float32))))[:, 1]
Но теперь у меня возникают проблемы при случайном выборе элемента этого нового тензора idx
. Теперь этот тензор old_config
нельзя изменить, поскольку он является постоянным тензором. Как я могу «скопировать» его содержимое в пустой массив или как создать еще один постоянный тензор с модификациями, которые я ожидаю от функции modify_vec
? Спасибо.