Это наивный подход, который я только что реализовал, на случай, если кто-нибудь столкнется с этим вопросом.
def rotate_vector_by_random_theta(vector, max_theta):
theta_x = (2 * random.random() - 1) * max_theta
theta_y = (2 * random.random() - 1) * max_theta
theta_z = (2 * random.random() - 1) * max_theta
rotation_matrix_x = [[1,0,0],
[0,math.cos(theta_x), -math.sin(theta_x)],
[0, math.sin(theta_x), math.cos(theta_x)]]
rotation_matrix_y = [[math.cos(theta_y), 0, - math.sin(theta_y)],
[0, 1, 0],
[math.sin(theta_y), 0, math.cos(theta_y)]]
rotation_matrix_z = [[math.cos(theta_z), math.sin(theta_z), 0],
[-math.sin(theta_z), math.cos(theta_z), 0],
[0,0,1]]
vector = np.matmul(rotation_matrix_x, vector)
vector = np.matmul(rotation_matrix_y, vector)
vector = np.matmul(rotation_matrix_z, vector)
return vector
list(map(lambda x: rotate_vector_by_random_theta(x,0.1), [[1,0,0],[0,1,0],[0,0,1]]) )