*Memos:
- My post explains eye().
- My post explains diag().
- My post explains diagflat().
- My post explains diag_embed().
diagonal() can extract the view of the 1D or more D tensor of zero or more elements on the diagonal from the 2D or more D tensor of zero or more elements as shown below:
*Memos:
-
diagonal()
can be used with torch or a tensor. - The 1st argument(
input
) withtorch
or using a tensor(Required-Type:tensor
ofint
,float
,complex
orbool
). - The 2nd argument with torch or the 1st argument with a tensor is
offset
(Optional-Default:0
-Type:int
). - The 3rd argument with torch or the 2nd argument with a tensor is
dim1
(Optional-Default:0
-Type:int
). - The 4th argument with torch or the 3rd argument with a tensor is
dim2
(Optional-Default:1
-Type:int
).
import torch
my_tensor = torch.tensor([[7, -4, 5],
[-6, -3, 8],
[9, 1, -2]])
torch.diagonal(input=my_tensor)
my_tensor.diagonal()
torch.diagonal(input=my_tensor, offset=0, dim1=0, dim2=1)
torch.diagonal(input=my_tensor, offset=0, dim1=0, dim2=-1)
torch.diagonal(input=my_tensor, offset=0, dim1=1, dim2=0)
torch.diagonal(input=my_tensor, offset=0, dim1=1, dim2=-2)
torch.diagonal(input=my_tensor, offset=0, dim1=-1, dim2=0)
torch.diagonal(input=my_tensor, offset=0, dim1=-1, dim2=-2)
torch.diagonal(input=my_tensor, offset=0, dim1=-2, dim2=1)
torch.diagonal(input=my_tensor, offset=0, dim1=-2, dim2=-1)
# tensor([7, -3, -2])
torch.diagonal(input=my_tensor, offset=1, dim1=0, dim2=1)
torch.diagonal(input=my_tensor, offset=1, dim1=0, dim2=-1)
torch.diagonal(input=my_tensor, offset=1, dim1=-2, dim2=1)
torch.diagonal(input=my_tensor, offset=1, dim1=-2, dim2=-1)
torch.diagonal(input=my_tensor, offset=-1, dim1=1, dim2=0)
torch.diagonal(input=my_tensor, offset=-1, dim1=1, dim2=-2)
torch.diagonal(input=my_tensor, offset=-1, dim1=-1, dim2=0)
torch.diagonal(input=my_tensor, offset=-1, dim1=-1, dim2=-2)
# tensor([-4, 8])
torch.diagonal(input=my_tensor, offset=1, dim1=1, dim2=0)
torch.diagonal(input=my_tensor, offset=1, dim1=1, dim2=-2)
torch.diagonal(input=my_tensor, offset=1, dim1=-1, dim2=0)
torch.diagonal(input=my_tensor, offset=1, dim1=-1, dim2=-2)
torch.diagonal(input=my_tensor, offset=-1, dim1=0, dim2=1)
torch.diagonal(input=my_tensor, offset=-1, dim1=0, dim2=-1)
torch.diagonal(input=my_tensor, offset=-1, dim1=-2, dim2=1)
torch.diagonal(input=my_tensor, offset=-1, dim1=-2, dim2=-1)
# tensor([-6, 1])
torch.diagonal(input=my_tensor, offset=2, dim1=0, dim2=1)
torch.diagonal(input=my_tensor, offset=2, dim1=0, dim2=-1)
torch.diagonal(input=my_tensor, offset=2, dim1=-2, dim2=1)
torch.diagonal(input=my_tensor, offset=2, dim1=-2, dim2=-1)
torch.diagonal(input=my_tensor, offset=-2, dim1=1, dim2=0)
torch.diagonal(input=my_tensor, offset=-2, dim1=1, dim2=-2)
torch.diagonal(input=my_tensor, offset=-2, dim1=-1, dim2=0)
torch.diagonal(input=my_tensor, offset=-2, dim1=-1, dim2=-2)
# tensor([5])
torch.diagonal(input=my_tensor, offset=2, dim1=1, dim2=0)
torch.diagonal(input=my_tensor, offset=2, dim1=1, dim2=-2)
torch.diagonal(input=my_tensor, offset=2, dim1=-1, dim2=0)
torch.diagonal(input=my_tensor, offset=2, dim1=-1, dim2=-2)
torch.diagonal(input=my_tensor, offset=-2, dim1=0, dim2=1)
torch.diagonal(input=my_tensor, offset=-2, dim1=0, dim2=-1)
torch.diagonal(input=my_tensor, offset=-2, dim1=-2, dim2=1)
torch.diagonal(input=my_tensor, offset=-2, dim1=-2, dim2=-1)
# tensor([9])
my_tensor = torch.tensor([[7., -4., 5.],
[-6., -3., 8.],
[9., 1., -2.]])
torch.diagonal(input=my_tensor)
# tensor([7., -3., -2.])
my_tensor = torch.tensor([[7.+0.j, -4.+0.j, 5.+0.j],
[-6.+0.j, -3.+0.j, 8.+0.j],
[9.+0.j, 1.+0.j, -2.+0.j]])
torch.diagonal(input=my_tensor)
# tensor([7.+0.j, -3.+0.j, -2.+0.j])
my_tensor = torch.tensor([[False, True, True],
[True, False, True],
[True, True, False]])
torch.diagonal(input=my_tensor)
# tensor([False, False, False])
my_tensor = torch.tensor([[[7, -4, 5], [-6, -3, 8], [9, 1, -2]],
[[3, -1, 8], [0, 1, 6], [-7, 4, -9]],
[[6, -8, -9], [-4, 5, 0], [-3, -5, 2]]])
torch.diagonal(input=my_tensor)
torch.diagonal(input=my_tensor, offset=0, dim1=0, dim2=1)
torch.diagonal(input=my_tensor, offset=0, dim1=0, dim2=-2)
torch.diagonal(input=my_tensor, offset=0, dim1=1, dim2=0)
torch.diagonal(input=my_tensor, offset=0, dim1=1, dim2=-3)
torch.diagonal(input=my_tensor, offset=0, dim1=-2, dim2=0)
torch.diagonal(input=my_tensor, offset=0, dim1=-2, dim2=-3)
torch.diagonal(input=my_tensor, offset=0, dim1=-3, dim2=1)
torch.diagonal(input=my_tensor, offset=0, dim1=-3, dim2=-2)
# tensor([[7, 0, -3],
# [-4, 1, -5],
# [5, 6, 2]])
torch.diagonal(input=my_tensor, offset=0, dim1=0, dim2=2)
torch.diagonal(input=my_tensor, offset=0, dim1=0, dim2=-1)
torch.diagonal(input=my_tensor, offset=0, dim1=2, dim2=0)
torch.diagonal(input=my_tensor, offset=0, dim1=2, dim2=-3)
torch.diagonal(input=my_tensor, offset=0, dim1=-1, dim2=0)
torch.diagonal(input=my_tensor, offset=0, dim1=-1, dim2=-3)
torch.diagonal(input=my_tensor, offset=0, dim1=-3, dim2=2)
torch.diagonal(input=my_tensor, offset=0, dim1=-3, dim2=-1)
# tensor([[7, -1, -9],
# [-6, 1, 0],
# [9, 4, 2]])
torch.diagonal(input=my_tensor, offset=0, dim1=1, dim2=2)
torch.diagonal(input=my_tensor, offset=0, dim1=1, dim2=-1)
torch.diagonal(input=my_tensor, offset=0, dim1=2, dim2=1)
torch.diagonal(input=my_tensor, offset=0, dim1=2, dim2=-2)
torch.diagonal(input=my_tensor, offset=0, dim1=-1, dim2=1)
torch.diagonal(input=my_tensor, offset=0, dim1=-1, dim2=-2)
torch.diagonal(input=my_tensor, offset=0, dim1=-2, dim2=2)
torch.diagonal(input=my_tensor, offset=0, dim1=-2, dim2=-1)
# tensor([[7, -3, -2],
# [3, 1, -9],
# [6, 5, 2]])
torch.diagonal(input=my_tensor, offset=1, dim1=0, dim2=1)
torch.diagonal(input=my_tensor, offset=1, dim1=0, dim2=-2)
torch.diagonal(input=my_tensor, offset=1, dim1=-3, dim2=1)
torch.diagonal(input=my_tensor, offset=1, dim1=-3, dim2=-2)
torch.diagonal(input=my_tensor, offset=-1, dim1=1, dim2=0)
torch.diagonal(input=my_tensor, offset=-1, dim1=1, dim2=-3)
torch.diagonal(input=my_tensor, offset=-1, dim1=-2, dim2=0)
torch.diagonal(input=my_tensor, offset=-1, dim1=-2, dim2=-3)
# tensor([[-6, -7],
# [-3, 4],
# [8, -9]])
torch.diagonal(input=my_tensor, offset=1, dim1=0, dim2=2)
torch.diagonal(input=my_tensor, offset=1, dim1=0, dim2=-1)
torch.diagonal(input=my_tensor, offset=1, dim1=-3, dim2=2)
torch.diagonal(input=my_tensor, offset=1, dim1=-3, dim2=-1)
torch.diagonal(input=my_tensor, offset=-1, dim1=2, dim2=0)
torch.diagonal(input=my_tensor, offset=-1, dim1=2, dim2=-3)
torch.diagonal(input=my_tensor, offset=-1, dim1=-1, dim2=0)
torch.diagonal(input=my_tensor, offset=-1, dim1=-1, dim2=-3)
# tensor([[-4, 8],
# [-3, 6],
# [1, -9]])
torch.diagonal(input=my_tensor, offset=1, dim1=1, dim2=0)
torch.diagonal(input=my_tensor, offset=1, dim1=1, dim2=-3)
torch.diagonal(input=my_tensor, offset=1, dim1=-2, dim2=0)
torch.diagonal(input=my_tensor, offset=1, dim1=-2, dim2=-3)
torch.diagonal(input=my_tensor, offset=-1, dim1=0, dim2=1)
torch.diagonal(input=my_tensor, offset=-1, dim1=0, dim2=-2)
torch.diagonal(input=my_tensor, offset=-1, dim1=-3, dim2=1)
torch.diagonal(input=my_tensor, offset=-1, dim1=-3, dim2=-2)
# tensor([[3, -4],
# [-1, 5],
# [8, 0]])
torch.diagonal(input=my_tensor, offset=1, dim1=1, dim2=2)
torch.diagonal(input=my_tensor, offset=1, dim1=1, dim2=-1)
torch.diagonal(input=my_tensor, offset=1, dim1=-2, dim2=2)
torch.diagonal(input=my_tensor, offset=1, dim1=-2, dim2=-1)
torch.diagonal(input=my_tensor, offset=-1, dim1=2, dim2=1)
torch.diagonal(input=my_tensor, offset=-1, dim1=2, dim2=-2)
torch.diagonal(input=my_tensor, offset=-1, dim1=-1, dim2=1)
torch.diagonal(input=my_tensor, offset=-1, dim1=-1, dim2=-2)
# tensor([[-4, 8],
# [-1, 6],
# [-8, 0]])
torch.diagonal(input=my_tensor, offset=1, dim1=2, dim2=0)
torch.diagonal(input=my_tensor, offset=1, dim1=2, dim2=-3)
torch.diagonal(input=my_tensor, offset=1, dim1=-1, dim2=0)
torch.diagonal(input=my_tensor, offset=1, dim1=-1, dim2=-3)
torch.diagonal(input=my_tensor, offset=-1, dim1=0, dim2=2)
torch.diagonal(input=my_tensor, offset=-1, dim1=0, dim2=-1)
torch.diagonal(input=my_tensor, offset=-1, dim1=-3, dim2=2)
torch.diagonal(input=my_tensor, offset=-1, dim1=-3, dim2=-1)
# tensor([[3, -8],
# [0, 5],
# [-7, -5]])
torch.diagonal(input=my_tensor, offset=1, dim1=2, dim2=1)
torch.diagonal(input=my_tensor, offset=1, dim1=2, dim2=-2)
torch.diagonal(input=my_tensor, offset=1, dim1=-1, dim2=1)
torch.diagonal(input=my_tensor, offset=1, dim1=-1, dim2=-2)
torch.diagonal(input=my_tensor, offset=-1, dim1=1, dim2=2)
torch.diagonal(input=my_tensor, offset=-1, dim1=1, dim2=-1)
torch.diagonal(input=my_tensor, offset=-1, dim1=-2, dim2=2)
torch.diagonal(input=my_tensor, offset=-1, dim1=-2, dim2=-1)
# tensor([[-6, 1],
# [0, 4],
# [-4, -5]])
torch.diagonal(input=my_tensor, offset=2, dim1=0, dim2=1)
torch.diagonal(input=my_tensor, offset=2, dim1=0, dim2=-2)
torch.diagonal(input=my_tensor, offset=2, dim1=-3, dim2=1)
torch.diagonal(input=my_tensor, offset=2, dim1=-3, dim2=-2)
torch.diagonal(input=my_tensor, offset=-2, dim1=1, dim2=0)
torch.diagonal(input=my_tensor, offset=-2, dim1=1, dim2=-3)
torch.diagonal(input=my_tensor, offset=-2, dim1=-2, dim2=0)
torch.diagonal(input=my_tensor, offset=-2, dim1=-2, dim2=-3)
# tensor([[9],
# [1],
# [-2]])
torch.diagonal(input=my_tensor, offset=2, dim1=0, dim2=2)
torch.diagonal(input=my_tensor, offset=2, dim1=0, dim2=-1)
torch.diagonal(input=my_tensor, offset=2, dim1=-3, dim2=2)
torch.diagonal(input=my_tensor, offset=2, dim1=-3, dim2=-1)
torch.diagonal(input=my_tensor, offset=-2, dim1=2, dim2=0)
torch.diagonal(input=my_tensor, offset=-2, dim1=2, dim2=-3)
torch.diagonal(input=my_tensor, offset=-2, dim1=-1, dim2=0)
torch.diagonal(input=my_tensor, offset=-2, dim1=-1, dim2=-3)
# tensor([[5],
# [8],
# [-2]])
torch.diagonal(input=my_tensor, offset=2, dim1=1, dim2=0)
torch.diagonal(input=my_tensor, offset=2, dim1=1, dim2=-3)
torch.diagonal(input=my_tensor, offset=2, dim1=-2, dim2=0)
torch.diagonal(input=my_tensor, offset=2, dim1=-2, dim2=-3)
torch.diagonal(input=my_tensor, offset=-2, dim1=0, dim2=1)
torch.diagonal(input=my_tensor, offset=-2, dim1=0, dim2=-2)
torch.diagonal(input=my_tensor, offset=-2, dim1=-3, dim2=1)
torch.diagonal(input=my_tensor, offset=-2, dim1=-3, dim2=-2)
# tensor([[6],
# [-8],
# [-9]])
torch.diagonal(input=my_tensor, offset=2, dim1=1, dim2=2)
torch.diagonal(input=my_tensor, offset=2, dim1=1, dim2=-1)
torch.diagonal(input=my_tensor, offset=2, dim1=-2, dim2=2)
torch.diagonal(input=my_tensor, offset=2, dim1=-2, dim2=-1)
torch.diagonal(input=my_tensor, offset=-2, dim1=2, dim2=1)
torch.diagonal(input=my_tensor, offset=-2, dim1=2, dim2=-2)
torch.diagonal(input=my_tensor, offset=-2, dim1=-1, dim2=1)
torch.diagonal(input=my_tensor, offset=-2, dim1=-1, dim2=-2)
# tensor([[5],
# [8],
# [-9]])
torch.diagonal(input=my_tensor, offset=2, dim1=2, dim2=0)
torch.diagonal(input=my_tensor, offset=2, dim1=2, dim2=-3)
torch.diagonal(input=my_tensor, offset=2, dim1=-1, dim2=0)
torch.diagonal(input=my_tensor, offset=2, dim1=-1, dim2=-3)
torch.diagonal(input=my_tensor, offset=-2, dim1=0, dim2=2)
torch.diagonal(input=my_tensor, offset=-2, dim1=0, dim2=-1)
torch.diagonal(input=my_tensor, offset=-2, dim1=-3, dim2=2)
torch.diagonal(input=my_tensor, offset=-2, dim1=-3, dim2=-1)
# tensor([[6],
# [-4],
# [-3]])
torch.diagonal(input=my_tensor, offset=2, dim1=2, dim2=1)
torch.diagonal(input=my_tensor, offset=2, dim1=2, dim2=-2)
torch.diagonal(input=my_tensor, offset=2, dim1=-1, dim2=1)
torch.diagonal(input=my_tensor, offset=2, dim1=-1, dim2=-2)
torch.diagonal(input=my_tensor, offset=-2, dim1=1, dim2=2)
torch.diagonal(input=my_tensor, offset=-2, dim1=1, dim2=-1)
torch.diagonal(input=my_tensor, offset=-2, dim1=-2, dim2=2)
torch.diagonal(input=my_tensor, offset=-2, dim1=-2, dim2=-1)
# tensor([[9],
# [-7],
# [-3]])
Top comments (0)