gpt4 book ai didi

python - 通过旋转矩阵数组旋转向量数组

转载 作者:行者123 更新时间:2023-11-28 21:47:34 26 4
gpt4 key购买 nike

如果我们有一个 3 x 3 旋转矩阵 R,它可以与 v 相乘,一个 3 x N 数组 - N 列向量的数组 - 生成一个新的 3 x N 旋转向量数组,如下所示:

v_rotated = R.dot(v)

现在假设我们有一个 N x M x 3 数组,N 乘以 M 向量,我想用 旋转它N 个不同的 3 x 3 旋转矩阵(每个“行”向量对应一个旋转矩阵)。这对于循环来说很简单,但是有没有更快更紧凑(矢量化)的方式来做到这一点,例如使用 numpydottensorproduct?

循环实现的示例代码:

from numpy import cos, sin, array, pi, linspace, random

# 100 different rotation matrices:
R = [array([[1, 0, 0], [0, cos(theta), -sin(theta)], [0, sin(theta), cos(theta)]]) for theta in linspace(0, pi, 100)]
# 100 x 200 random vectors:
v = random.random((100, 200, 3))

# rotate vectors in loop:
rotated_v = array([R_.dot(v_.T).T for R_, v_ in zip(R, v)])

最佳答案

假设 v.shape(N, M, 3)R.shape(N, 3 , 3),你可以使用 np.einsum

import numpy as np
rotated_v = np.einsum('lij, lkj->lki', R, v)

其中lN上的索引,ij3x3上的索引旋转维度,kM上的索引。

我将我的结果与你的匹配如下:

>>> print np.allclose(my_rotated_v, your_rotated_v)
True

关于python - 通过旋转矩阵数组旋转向量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36306303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com