[英]torch assign not in place by tensor slicing in pytorch
我正在尝试将我当前的代码(将张量分配到位)转换为外部操作。
意思是目前的代码是
self.X[:, nc:] = D
其中 D 与self.X[:, nc:]
形状相同
但我想将其转换为
sliced_index = ~ somehow create an indexed tensor from self.X[:, nc:]
self.X = self.X.scatter(1,sliced_index,mm(S_, Z[:, :n - nc]))
并且不知道如何创建仅表示切片张量中的条目的索引掩码张量
最小的例子:
a = [[0,1,2],[3,4,5]]
D = [[6],[7]]
Not_in_place = [[0,1,6],[3,4,7]]
蒙版散布更容易一些。 掩码本身可以作为就地操作计算,之后您可以使用masked_scatter
mask = torch.zeros(self.X.shape, device=self.X.device, dtype=torch.bool)
mask[:, nc:] = True
self.X = self.X.masked_scatter(mask, D)
依赖广播但应该更有效的更专业的版本将是
mask = torch.zeros([1, self.X.size(1)], device=self.X.device, dtype=torch.bool)
mask[0, nc:] = True
self.X = self.X.masked_scatter(mask, D)
使用Tensor.clone
复制张量。
a = torch.tensor([[0,1,2],[3,4,5]])
D = torch.tensor([[6],[7]])
n, n[:,-1:] = a.clone(), D
n
tensor([[0, 1, 6],
[3, 4, 7]])
a
tensor([[0, 1, 2],
[3, 4, 5]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.