Можно ли замощать каждую строку разное время заданным вектором

С тензорным потоком у меня есть такие тензоры строк, как

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

и у меня есть список, по которому я хочу повторить строки выше,

[ 3, 2, 1 ]

В результате хочу

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

что значит Хочу [0, 1, 2] трижды, [1, 2, 3] дважды, [4, 5, 6] только один раз, следуя [3, 2, 1] (это мой второй аргумент).

Это не проблема, если к этому относиться как к процедуре.

Но я понятия не имею о tensorflow ops.

Предлагаемый «дублированный» вопрос имеет смысл. Идея ответа также была вдохновляющей. Но я думаю, что есть необходимость обобщить случай, объединить и объединить разрозненные решения в одно. Позвольте мне добавить некоторые решения, которые я нашел.

Возможный дубликат Повтор Tensorflow numpy

jdehesa 30.05.2019 11:00
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это хороший ответ.

Повтор Tensorflow numpy

Я нашел еще одну подсказку из дерева вкладов тензорного потока

https://github.com/tensorflow/tensorflow/blob/59ecde3ecfc83aeb8ec0682e4e39bf0a234bbef8/tensorflow/contrib/training/python/training/resample.py#L32

которые повторяют список диапазона ([0,...,n]) скаляров до своего времени. от 0 до 0 раз 1 к 1 раз от 2 до 2 раз ... от n до n раз

который выглядит слишком ограниченным, чтобы использовать его сам с собой.

Но while_loop из control_flow_ops выглядит очень полезным.

with ops.name_scope(name, 'repeat_range', [counts]) as scope:
    counts = ops.convert_to_tensor(counts, name='counts')

    def cond(unused_output, i):
      return i < size

    def body(output, i):
      value = array_ops.fill(counts[i:i+1], i)
      return (output.write(i, value), i + 1)

    size = array_ops.shape(counts)[0]
    init_output_array = tensor_array_ops.TensorArray(
        dtype=dtypes.int32, size=size, infer_shape=False)
    output_array, num_writes = control_flow_ops.while_loop(
        cond, body, loop_vars=[init_output_array, 0])

    return control_flow_ops.cond(
        num_writes > 0,
        output_array.concat,
        lambda: array_ops.zeros(shape=[0], dtype=dtypes.int32),
        name=scope)

Поэтому я обмениваю array_ops.fill на body с

   tile_repeats = tf.concat([[counts[i]], tf.ones([tf.rank(rows) - 1], 
          dtype=tf.int32)], axis=0)
   value = tf.tile(tf.expand_dims(rows[i], 0), tile_repeats)

И это сработало.

Другие вопросы по теме