Добавление небольшой случайной ошибки в список нормальных векторов - PullRequest
0 голосов
/ 14 октября 2019

У меня есть список нормализованных векторов, например:

[[1,0,0],[0,1,0],[0.5,-0.3,...]...]

Чтобы смоделировать ошибку, я бы хотел повернуть каждую нормаль на некоторый небольшой случайный угол (и плоскость) - разные для каждой нормали.

Несмотря на то, что добавление небольших случайных чисел к x, y, z каждого нормального значения и затем повторная нормализация были бы одним из подходов, это не будет должным образом отражать распределение, которое я ищу.

Есть идеи, какой самый эффективный способ сделать это?

Спасибо.

1 Ответ

0 голосов
/ 14 октября 2019

Это наивный подход, который я только что реализовал, на случай, если кто-нибудь столкнется с этим вопросом.

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]]) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...