Hi, lets think matrix x = Torch.rand((256,2)). How can I rotate this matrix in PyTorch ? For example by 5 degrees. How to create rotation matrix for this ?

Thank you

Hi, lets think matrix x = Torch.rand((256,2)). How can I rotate this matrix in PyTorch ? For example by 5 degrees. How to create rotation matrix for this ?

Thank you

1 Like

So you have 256 points in 2d?

```
import math
x = torch.rand(256, 2)
phi = torch.tensor(5 * math.pi / 180)
s = torch.sin(phi)
c = torch.cos(phi)
rot = torch.stack([torch.stack([c, -s]),
torch.stack([s, c])])
x_rot = x @ rot.t() # same as x_rot = (rot @ x.t()).t() due to rot in O(n) (SO(n) even)
```

or somesuch.

Best regards

Thomas

2 Likes

Thank you a lot, this helped me!

1 Like

If I can have one more question what is the difference betwen-

```
x_rot = x @ rot.t()
```

and

```
x_rot = torch.matmul(x,rot)
```

`@`

and `torch.matmul`

are identical, but if you leave out the `.t()`

, youâ€™ll change the direction of rotation (because `.t()`

is the inverse rotation), I thought that the version with `.t()`

might be the more canonical (because the convention would seem to be to multiply from the left but that doesnâ€™t work with the batch dimension coming first). Combined this is the funny math geek comment in the code snippet.

2 Likes

@tom Hi, one more thing. Do you have any idea how to plot these two matrices and see rotation on some type of plot ? When I want to do this i cannot just plot Matrix as image right ?

Maybe plotting one or two rotated unit vectors (ie use the two entries of a row of the matrix as x and y) would work.

Edit: Back at the computer (and â€śeerâ€ť about the rotation direction conventionâ€¦):

```
from matplotlib import pyplot
pyplot.figure(figsize=(3, 3))
pyplot.arrow(0, 0, 1, 0, width=0.02, alpha=0.5)
pyplot.arrow(0, 0, 0, 1, width=0.02, alpha=0.5)
pyplot.arrow(0, 0, rot[0, 0].item(), rot[0, 1].item(), width=0.02)
pyplot.arrow(0, 0, rot[1, 0].item(), rot[1, 1].item(), width=0.02)
```

1 Like