我有一个维度为([384])的1D TorchTensor。我想在这个Tensor的每个奇数索引后面加上零或其他数字,最终将其维数加倍为([768])。更具体地说,考虑[0, 1, 2,..., 382, 383]
作为我的TorchTensor的索引。假设 * 是零/数字的索引,我想插入并制作一个像[0, 1, *, 2, 3, *,...]
这样的Tensor。
我唯一的解决方案是在for循环中插入这些元素,但这会很耗时。由于我必须对数百个Tensor进行这些更改,我想知道PyTorch或NumPy是否有更快的函数来执行此操作!
2条答案
按热度按时间6qfn3psc1#
我不知道有什么直接的方法可以达到你的要求。我认为下面的代码(使用torch.tensor索引)比您正在寻找的代码更复杂,但为了以防万一它对您有帮助,我还是把它留在这里。
输出量:
1qczuiv02#
是的,您可以使用类似于this post的拼接技巧。让
A
是一个长度为a
的Tensor(在你的例子中是a =384
)。假设你想每n
个元素添加一个新元素(在你的例子中是n = 2
)。首先,我们将列表重新塑造成一个2D数组,列数为n
:A = torch.兰德(384)#例如这是唯一一个逻辑上重要的部分。如果我们将
B
看作一维的Tensor/列表,pytorch会先沿着第0个维度,然后是第1个维度,依此类推。这意味着对于一个3D数组,我们最终会得到一个列的行的列表,而对于一个2D数组(正如我们所做的那样),我们最终会得到一个行的列表。这给了我们想要的顺序。如果你想在
A
的现有元素之间添加多个元素,你可以将new
的形状改为[a,num_elem]
,其中num_elem
是你想插入的元素数量。