【发布时间】:2016-07-18 07:22:33
【问题描述】:
如果我们有一个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 旋转矩阵来旋转它(每个“行”向量都有一个旋转矩阵)。这很容易用循环来完成,但是有没有更快、更紧凑(矢量化)的方式来做到这一点,例如与numpy 的dot 或tensorproduct?
循环实现示例代码:
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)])
【问题讨论】:
-
如果您已实现,请分享循环代码,以便我们检查任何建议的解决方案?
-
@Divakar 添加了循环代码(当然是玩具示例)
-
也许这个关于如何计算旋转矩阵向量化的问题对某人有用:stackoverflow.com/q/67874876/12131616
标签: python numpy scipy vectorization