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%的人所投的票会被记录下来,但不会改变公开显示的帖子分数