Python 如何生成tensorflow矩阵,其中第一列为1,其余列为0

Python 如何生成tensorflow矩阵,其中第一列为1,其余列为0,python,tensorflow,matrix,Python,Tensorflow,Matrix,给定向量的个数列表,例如: [1] [3] [2] [1] 其中lenu列表的形状现在是(4,1) 并且给定向量的列数,例如vec_dim=5 我想生成一个张量,其中第一列为1,其余列为0。 例如,形状为(4,5)的矩阵如下: [1 0 0 0 0] [1 1 1 0 0] [1 1 0 0 0] [1 0 0 0 0] 如何做到这一点 我知道我可以通过迭代生成这个矩阵 但在我的情况下,批大小没有设置,即len_list的形状是(无,1),我必须向占位符提供批大小以实现此功能。因此,如何

给定向量的个数列表,例如:

[1]
[3] 
[2] 
[1]
其中
lenu列表的形状现在是
(4,1)

并且给定向量的列数,例如
vec_dim=5

我想生成一个张量,其中第一列为1,其余列为0。 例如,形状为
(4,5)
的矩阵如下:

[1 0 0 0 0]
[1 1 1 0 0]
[1 1 0 0 0]
[1 0 0 0 0]
如何做到这一点

我知道我可以通过迭代生成这个矩阵


但在我的情况下,批大小没有设置,即
len_list
的形状是
(无,1)
,我必须向占位符提供批大小以实现此功能。因此,如何生成具有形状
(无,向量大小)

的张量?您可以使用
tf.sequence\u mask()
来实现这一点,它返回表示每个单元格前N个位置的掩码张量

下面是获取上述输出的代码

len_list = np.array([1,3,2,1])

mask = tf.sequence_mask(len_list, maxlen=5, dtype=tf.int32) #maxlen set to 5 to generate (4,5) matrix.
输出:

<tf.Tensor: shape=(4, 5), dtype=int32, numpy=
array([[1, 0, 0, 0, 0],
       [1, 1, 1, 0, 0],
       [1, 1, 0, 0, 0],
       [1, 0, 0, 0, 0]], dtype=int32)>  
<tf.Tensor: shape=(4, 3), dtype=int32, numpy=
array([[1, 0, 0],
       [1, 1, 1],
       [1, 1, 0],
       [1, 0, 0]], dtype=int32)>  
输出:

<tf.Tensor: shape=(4, 5), dtype=int32, numpy=
array([[1, 0, 0, 0, 0],
       [1, 1, 1, 0, 0],
       [1, 1, 0, 0, 0],
       [1, 0, 0, 0, 0]], dtype=int32)>  
<tf.Tensor: shape=(4, 3), dtype=int32, numpy=
array([[1, 0, 0],
       [1, 1, 1],
       [1, 1, 0],
       [1, 0, 0]], dtype=int32)>  

您可以使用
tf.sequence\u mask()
实现这一点,它返回一个表示每个单元格前N个位置的掩码张量

下面是获取上述输出的代码

len_list = np.array([1,3,2,1])

mask = tf.sequence_mask(len_list, maxlen=5, dtype=tf.int32) #maxlen set to 5 to generate (4,5) matrix.
输出:

<tf.Tensor: shape=(4, 5), dtype=int32, numpy=
array([[1, 0, 0, 0, 0],
       [1, 1, 1, 0, 0],
       [1, 1, 0, 0, 0],
       [1, 0, 0, 0, 0]], dtype=int32)>  
<tf.Tensor: shape=(4, 3), dtype=int32, numpy=
array([[1, 0, 0],
       [1, 1, 1],
       [1, 1, 0],
       [1, 0, 0]], dtype=int32)>  
输出:

<tf.Tensor: shape=(4, 5), dtype=int32, numpy=
array([[1, 0, 0, 0, 0],
       [1, 1, 1, 0, 0],
       [1, 1, 0, 0, 0],
       [1, 0, 0, 0, 0]], dtype=int32)>  
<tf.Tensor: shape=(4, 3), dtype=int32, numpy=
array([[1, 0, 0],
       [1, 1, 1],
       [1, 1, 0],
       [1, 0, 0]], dtype=int32)>  


@Megan Dawn-如果上述答案满足您的要求,您能接受并投票表决答案吗?已经这样做了,同时-----------感谢您的反馈!声誉低于15的人所投的票会被记录下来,但不要更改公开显示的帖子分数。@Megan Dawn-如果上述答案满足您的要求,您能接受并投票吗?已经这样做了,同时------感谢您的反馈!声誉低于15%的人所投的票会被记录下来,但不会改变公开显示的帖子分数