我如何用零填充参差不齐的张量以制作平方张量

时间:2019-11-13 23:56:29

标签: python numpy tensorflow

我想将A转换为B:

A = 
  [1, 1, 1]
  [2]
  [3, 3, 3, 3]
  [4, 4]

B =
  [
   [0, 1, 1, 1]
   [0, 0, 0, 2]
   [3, 3, 3, 3]
   [0, 0, 4, 4]
  ]

输入
-列表列表

输出
-单个矩阵或张量
-右对齐
-左填充0's

2 个答案:

答案 0 :(得分:2)

A是一个列表,因此我们可以进行循环并使用tf.padtf.stack来获取输出张量。

max_len = max(len(e) for e in A)
res = tf.stack([tf.pad(e, [[max_len - len(e),0]]) for e in A], axis=0)
# array([[0, 1, 1, 1],
#        [0, 0, 0, 2],
#        [3, 3, 3, 3],
#        [0, 0, 4, 4]], dtype=int32)

答案 1 :(得分:1)

在特定情况下,每个第一维的值与示例中的相同。您可以使用:

digits = tf.ragged.constant([[1., 1., 1.],[2.],[3., 3., 3., 3.],[4., 4.]])
padded = digits.to_tensor(0.)
final_tensor = tf.reverse(zeros, [-1])
#tf.Tensor(
#[[0. 1. 1. 1.]
# [0. 0. 0. 2.]
# [3. 3. 3. 3.]
# [0. 0. 4. 4.]], shape=(4, 4), dtype=float32)