Python Numpy 将旋转矩阵应用于数组中的每一行

6
我有一个旋转矩阵,并使用.dot将其应用于新值。如何将其应用于numpy数组中的每一行?
numpy数组如下:
 [-0.239746 -0.290771 -0.867432]
 [-0.259033 -0.320312 -0.911133]
 [-0.188721 -0.356445 -0.889648]
 [-0.186279 -0.359619 -0.895996]

希望做类似于for each line in array, rotation_matrix.dot(line)的操作,并将每一行添加到新数组中。

对Numpy不太熟悉,所以我相信这是一些很简单的东西,我只是无法理解。


rotation_matrix的形状是什么?你有没有写任何代码来实现那个伪代码?根据我的理解,你可以尝试:np.tensordot(rotation_matrix,input_array,axes=(1,1)) - Divakar
3个回答

10

将矩阵与旋转矩阵相乘会单独旋转所有列。只需先转置,进行乘法运算,再转置回来即可旋转所有行:

a = np.array([
 [-0.239746,-0.290771,-0.867432],
 [-0.259033,-0.320312,-0.911133],
 [-0.188721,-0.356445,-0.889648],
 [-0.186279,-0.359619,-0.895996],
])

rot = np.array([
 [0.67151763, 0.1469127, 0.72627869],
 [0.47140706, 0.67151763, -0.57169875],
 [-0.57169875, 0.72627869, 0.38168025],
])

print a

print "-----"

for i in range(a.shape[0]):
    print a[i, :]

print "-----"

for i in range(a.shape[0]):
    print rot.dot(a[i, :])

print "-----"

print rot.dot(a.T).T

0
假设您有一个3x3的旋转矩阵R,您想要将大小为3的向量作为行从数组A中的ra矩阵相乘,以得到大小为3的旋转后向量rb存储在数组B中:
import numpy as np

# Define numpy array.
A = np.array([[-0.239746, -0.290771, -0.867432],
              [-0.259033, -0.320312, -0.911133],
              [-0.188721, -0.356445, -0.889648],
              [-0.186279, -0.359619, -0.895996]])

# Define resulting zero array B.
B = np.zeros(A.shape)

# Loop over rows and determine rotated vectors.
for ra,rb in zip(A,B):
    rb = np.dot(R,ra)

-1
a.dot(rot) 

应该做你想要的事情。


1
这在数学上是错误的,旋转应该是 rot.dot(a),其中 a 是一个向量。 - pcko1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接