Один из способов, который не использует tf.gather_ind, заключается в следующем.Идея состоит в том, чтобы создать DATA1, который представляет собой DATA со всеми возможными перестановками (то есть результатом перестановки, если IND был вектором 1 с), и использовать маски, чтобы выбрать правильные значения из данных или данных Data1 в зависимости от того, нужен ли перестановкаили нет.
DATA1 = tf.concat([tf.reshape(DATA[:,:,1], [M, N, 1]), tf.reshape(DATA[:,:,0], [M, N, 1])], axis = 2)
Mask1 = tf.cast(tf.reshape(IND, [1, N, 1]), tf.float64)
Mask0 = 1 - Mask1
Res = tf.multiply(Mask0, DATA) + tf.multiply(Mask1, DATA1)