沿两个轴(第一行,然后是列,反之亦然)排列张量的最佳方法是什么?我应该定义一个 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]])
最佳答案
这是一个与 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
关于python - Tensorflow 中是否有用于改组或置换张量的内置函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39875674/