如果我们有一个
现在假设我们有一个
以下是使用循环实现的示例代码:
3 x 3
的旋转矩阵 R
,它可以与 v
相乘,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)])