Python 张量流中某些元素的逆序

Python 张量流中某些元素的逆序,python,tensorflow,matrix,indexing,tensor,Python,Tensorflow,Matrix,Indexing,Tensor,假设我有一个形状为(M,N,2)的张量数据。 我还有另一个张量IND,形状为(N),由0和1组成 如果IND(i)==1则数据(:,i,0)和数据(:,i,1)必须交换。如果IND(i)=0它们将不会交换 我该怎么做?我知道这可以通过tf.gather\u nd实现,但我不知道如何实现。一种不使用tf.gather\u ind的方法如下。其思想是构建数据1,即所有可能交换的数据(即,如果IND是1的向量,则交换的结果),并根据是否需要交换,使用掩码从数据或数据1中选择正确的值 DATA1 = t

假设我有一个形状为(M,N,2)的张量
数据。
我还有另一个张量
IND
,形状为(N),由0和1组成

如果
IND(i)==1
数据(:,i,0)
数据(:,i,1)
必须交换。如果
IND(i)=0
它们将不会交换


我该怎么做?我知道这可以通过
tf.gather\u nd
实现,但我不知道如何实现。

一种不使用tf.gather\u ind的方法如下。其思想是构建数据1,即所有可能交换的数据(即,如果IND是1的向量,则交换的结果),并根据是否需要交换,使用掩码从数据或数据1中选择正确的值

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)

以下是一种可能的解决方案,包括、、和:

data = tf.Variable([[[1, 2],
                     [2, 3],
                     [3, 4],
                     [4, 5],
                     [5, 6]]])  # shape=(1,5,2)

# reverse elements where ind is 1
ind = tf.constant([1, 0, 1, 0, 1])  # shape(5,)

cond = tf.where(tf.equal([ind], 1))
match_data = tf.gather_nd(data, cond)
rev_match_data = tf.reverse_v2(match_data, axis=[-1])
data = tf.scatter_nd_update(data, cond, rev_match_data)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(data))
    #[[[2 1]
    # [2 3]
    # [4 3]
    # [4 5]
    # [6 5]]]