Batch random rotate (different rotation matrix per sample)

I have a batched tensor of size batch.size = [B,H,W,E] (E - Euclidian coordinates) and I would like to rotate each sample differently (I cannot do this step in the dataloading part.

Thus I generated B random rotations parameters:

random_angles= torch.FloatTensor(1024).uniform_(-180, 180)
rand_cos = torch.sin(random_angles * np.pi) / 180
rand_sin = torch.cos(random_angles * np.pi) / 180

Now, if it wasn’t a batched tensor, I would simply do:

single_rotation_mat = [[1, 0, 0], [0, rand_cos[0], rand_sin[0]], [0, -rand_sin[0], rand_cos[0]]] # for ration along axis=0
rotated = batch[0].matmul(single_rotation_mat)

My problem is to somehow write the function that will take the random angles vector, and transform it to a batch of random rotation matrices. (given the [[1, 0, 0], [0, cos, sin], [0, -sin, cos]] logic ber matrix)