Ответ 1
Вы можете умножить A на транспонирование матрицы вращения:
A = dot(A, R.T)
У меня есть список трехмерных точек, хранящихся в массиве numpy A
с формой (N,3)
и матрицей вращения R
с формой (3,3)
. Я хотел бы вычислить точечный продукт R.x
для каждой точки x
в A
на месте. Наивно я могу это сделать:
for n in xrange(N):
A[n,:] = dot(R, A[n,:])
Есть ли способ векторизовать это с помощью собственного вызова numpy? Если это имеет значение, N - порядка нескольких тысяч.
Вы можете умножить A на транспонирование матрицы вращения:
A = dot(A, R.T)
Есть пара небольших обновлений/уточняющих моментов, чтобы добавить к Аапо Криоле (правильный) ответ. Во-первых, синтаксис умножения матриц можно немного упростить с помощью недавно добавленного оператора умножения матриц @
:
A = A @ R.T
Также вы можете упорядочить преобразование в стандартной форме (сначала матрицу вращения), взяв транспонирование A
перед умножением, а затем транспонировав результат:
A = (R @ A.T).T
Вы можете проверить, что обе формы преобразования дают одинаковые результаты с помощью следующего утверждения:
np.testing.assert_array_equal((R @ A.T).T, A @ R.T)