torch.narrow
作用:
- 使原Tensor变小,变窄,产生的Tensor与原Tensor共用一个内存。
参数:
- input,要缩小的Tensor。
- dim,沿着什么维度去缩小,0代表缩小行,1代表缩小列。
- start,开始维度。
- length,到最后一个维度的距离。
例子:
>>> x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> torch.narrow(x, 0, 0, 2) # 第一个参数是x,第二个参数0代表行缩小,第三个参数0代表从索引为0的地方开始,第四个参数代表输出的Tensor共两行。
tensor([[ 1, 2, 3],
[ 4, 5, 6]])
>>> torch.narrow(x, 1, 1, 2)
tensor([[ 2, 3],
[ 5, 6],
[ 8, 9]])
torch.nonzero
作用:
- 返回输入Tensor的非零值对应下标集合。
- 当as_tuple为False时,如果输入有n维,则得到的索引张量out是大小(z乘以n)(z×n),其中z是输入张量中非零元素的总数。
- 当as_tuple为True时,
参数:
- input,输入的Tensor。
- out,(可选)包含下标的Tensor。
例子:
>>> torch.nonzero(torch.tensor([1, 1, 1, 0, 1]))
tensor([[ 0],
[ 1],
[ 2],
[ 4]])
>>> torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0],
[0.0, 0.4, 0.0, 0.0],
[0.0, 0.0, 1.2, 0.0],
[0.0, 0.0, 0.0,-0.4]]))
tensor([[ 0, 0],
[ 1, 1],
[ 2, 2],
[ 3, 3]])
>>> torch.nonzero(torch.tensor([1, 1, 1, 0, 1]), as_tuple=True)
(tensor([0, 1, 2, 4]),)
>>> torch.nonzero(torch.tensor([[0.6, 0.0, 0.0, 0.0],
[0.0, 0.4, 0.0, 0.0],
[0.0, 0.0, 1.2, 0.0],
[0.0, 0.0, 0.0,-0.4]]), as_tuple=True)
(tensor([0, 1, 2, 3]), tensor([0, 1, 2, 3]))
>>> torch.nonzero(torch.tensor(5), as_tuple=True)
(tensor([0]),)
torch.reshape
作用:
- 返回一个与输入Tensor数据相同,元素个数也相同,但形状特殊的Tensor。
- 当参数为-1时,视为对输入Tensor进行平铺。
参数:
- input,输入Tensor。
- shape,新的形状。
例子:
>>> a = torch.arange(4.)
>>> torch.reshape(a, (2, 2))
tensor([[ 0., 1.],
[ 2., 3.]])
>>> b = torch.tensor([[0, 1], [2, 3]])
>>> torch.reshape(b, (-1,))
tensor([ 0, 1, 2, 3])
torch.squeeze
作用:
- 把输入的Tensor的维度大小为1的维度删除。
- 例如,输入的Tensor为(A×1×B×C×1×D),输出的Tensor为(A×B×C×D)。
- 得到的Tensor和输入的Tensor共享数据但不共享内存。
参数:
- input,输入的Tensor。
- dim,(可选)如果提供这个参数,就可以删除指定维度的维数1。
- out,(可选)输出的Tensor。
例子:
>>> x = torch.zeros(2, 1, 2, 1, 2)
>>> x.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x)
>>> y.size()
torch.Size([2, 2, 2])
>>> y = torch.squeeze(x, 0)
>>> y.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x, 1)
>>> y.size()
torch.Size([2, 2, 1, 2])
torch.unsqueeze
作用:
- 返回一个新的Tensor,在原Tensor的基础上,在固定位置插入一个维度,维数为1。
- 得到的Tensor和输入的Tensor共享一个数据。
参数:
- input,输入的Tensor。
- dim,插入单变量维度的索引。
- out,(可选)输出的Tensor。
例子:
>>> x = torch.tensor([1, 2, 3, 4]) # x.size()为torch.Size([4])
>>> torch.unsqueeze(x, 0)
tensor([[ 1, 2, 3, 4]]) # torch.Size([1, 4])
>>> torch.unsqueeze(x, 1)
tensor([[ 1], # torch.Size([4, 1])
[ 2],
[ 3],
[ 4]])
torch.stack
参数:
- tensors,输入Tensor。
- dim,要插入的维度。必须介于0和连接张量(包括)的维数之间。
- out,(可选)输出Tensor。
例子:
>>> x = torch.randn(2, 1)
>>> x
>>> y = torch.randn(2, 1)
>>> y
>>> torch.stack([x, y], 0)
>>> torch.stack([x, y], 1)
>>> torch.stack([x, y], 2)
tensor([[1],
[2]])
tensor([[3],
[4]])
tensor([[[1],
[2]],
[[3],
[4]]])
# torch.Size([2, 2, 1])
tensor([[[1],
[3]],
[[2],
[4]]])
# torch.Size([2, 2, 1])
tensor([[[1, 3]],
[[2, 4]]])
# torch.Size([2, 1, 2])