Rank manipulations
Aggiungere dimensioni
Possiamo facilmente aggiungere dimensioni di size 1, ad un tensore, modificandone il rank:
t = torch.ones(2,3,4,5)
# t.shape = [2,3,4,5]
# prepend a 1 size to the first dimension
t1 = t[None, :]
# t1.shape = [1,2,3,4,5]
# adds a 1 size in second dimension:
t1 = t[;, None, :]
# t1.shape = [2,1,3,4,5]
# adds a 1 size in third dimension:
t1 = t[;, :, None, :]
# t1.shape = [2,3,1,4,5]
# adds a 1 size in fourth dimension:
t1 = t[;, :, :, None, :]
# t1.shape = [2,3,4,1,5]
# adds a 1 size after last dimension:
t1 = t[;, None]
# t1.shape = [2,3,4,5,1]
é possibile usare anche torch.unsqueeze( tensor_t, dim_position)
Rimuovere dimensioni
per rimuovere tutte le dimensioni di size 1 da un tensore possiamo usare torch.squeeze()
t = torch.ones(3,4,1,1,1,5,1,4,1)
t.squeeze().shape
# torch.Size([3, 4, 5, 4])
Per rimuovere una dimensione specifica, modificando il rank di un tensore:
t = torch.ones(5,4,3,2,1)
# removes first dimension:
t1 = t[0, :]
# t1.shape = [4,3,2,1]
# removes second dimension:
t1 = t[;, 0, :]
# t1.shape = [5,3,2,1]
# removes third dimension:
t1 = t[;, :, 0, :]
# t1.shape = [5,4,2,1]