Tensorflow中是否有用于改组或置换张量的内置函数?

时间:2016-10-05 13:44:18

标签: python numpy tensorflow

沿两个轴排列张量的最佳方法是什么(第一行然后是列,反之亦然)?我应该定义py_func并使用numpy或使用张量转换函数(如tf.slice之一)来执行此操作 - 我不知道这是否可行。

要使用numpy来实现这一点,我通常会执行以下操作:

>>> arr = np.arange(9).reshape([3,3])
>>> arr
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> col_perm = np.random.permutation(arr.shape[1])
>>> col_perm
array([2, 1, 0])
>>> row_perm = np.random.permutation(arr.shape[0])
>>> row_perm
array([2, 0, 1])
>>> shuffled_arr = arr[row_perm,:][:,col_perm]
>>> shuffled_arr
array([[8, 7, 6],
       [2, 1, 0],
       [5, 4, 3]])

2 个答案:

答案 0 :(得分:0)

tf.random_shuffle()tensor transpositiontf.transpose())相结合后呢?

答案 1 :(得分:0)

这里有一个与 tf.random.shuffle() 完全相同的快速函数,但还需要一个轴维度

def tf_shuffle_axis(value, axis=0, seed=None, name=None):
    perm = list(range(tf.rank(value)))
    perm[axis], perm[0] = perm[0], perm[axis]
    value = tf.random.shuffle(tf.transpose(value, perm=perm))
    value = tf.transpose(value, perm=perm)
    return value