Skip to main content
 首页 » 编程设计

python之在 Tensorflow 中堆叠不同长度的向量

2024年08月19日36mfrbuaa

如何在 tensorflow 中堆叠不同长度的向量,例如来自

[1, 3, 5] 
[2, 3, 9, 1, 1] 
[6, 2] 

得到补零矩阵

[1, 3, 5, 0, 0] 
[2, 3, 9, 1, 1] 
[6, 2, 0, 0, 0] 

向量计数在定义时已知,但它们的长度未知。使用 tf.where(condition)

生成向量

请您参考如下方法:

您可以这样做的一种方法是:

In [11]: v1 = [1, 3, 5] 
In [12]: v2 = [2, 3, 9, 1, 1] 
In [14]: v3 = [6, 2] 
 
In [38]: max_len = max(len(v1), len(v2), len(v3)) 
In [39]: pad1 = [[0, max_len-len(v1)]] 
In [40]: pad2 = [[0, max_len-len(v2)]] 
In [41]: pad3 = [[0, max_len-len(v3)]] 
 
# pads 0 to original vectors up to `max_len` length 
In [42]: v1_padded = tf.pad(v1, pad1, mode='CONSTANT') 
In [43]: v2_padded = tf.pad(v2, pad2, mode='CONSTANT') 
In [44]: v3_padded = tf.pad(v3, pad3, mode='CONSTANT') 
 
 
In [53]: res = tf.stack([v1_padded, v2_padded, v3_padded], axis=0) 
 
In [56]: res.eval() 
Out[56]:  
array([[1, 3, 5, 0, 0], 
       [2, 3, 9, 1, 1], 
       [6, 2, 0, 0, 0]], dtype=int32) 

为了使其有效地处理 N 向量,您可能应该使用 for 循环来为所有向量准备 pad 变量,并且随后填充的向量。并且,最后使用 tf.stack 沿 0 轴堆叠这些填充向量以获得您想要的结果。


P.S.:一旦从tf.where(condition) 中获取向量的长度,您就可以动态获取向量的长度。