【发布时间】:2020-06-17 10:07:05
【问题描述】:
我有一个二维数组,假设大小为torch.tensor(batch_size, 1000)。来自第二维的 1000 数组实际上是可变长度的。我有第二个大小为[batch_size] 的数组,其中包含每行的长度...
这里是一个示例代码sn-p:
# preds is the 2d array of size [batch_size, 1000]
# lengths is a 1d array containing the lengths of each row of preds
res_pred = []
for i in range(len(preds)):
length = lengths[i].item()
res_pred += [preds[i][:length]]
result = torch.cat(res_pred).flatten()
我对我的目标做同样的事情,然后我可以对两者应用损失函数。
我想知道是否有一个向量化操作可以提取所有可变长度的batch_size 向量和torch.cat 一起。现在我在第一个维度上循环,但这感觉很慢。
谢谢,
【问题讨论】:
-
你能添加一个你的数组的例子吗?此外,使用循环添加慢速代码将有助于理解预期的输出。
-
你如何期望
torch.cat不同长度的向量?你要创建一个大小为(1, sum(vector_lengths))的单个向量吗? -
@AndreasK.,我添加了一个代码示例。我应该先这样做。谢谢
-
我不确定有没有一种有效的方法来做你想做的事。作为替代方案,您是否考虑过创建一个与
res_pred形状相同的掩码并仅计算掩码中具有 1 的值的损失? This answer 可能会帮助您创建面具。
标签: python arrays numpy multidimensional-array pytorch