Python Numpy将旋转矩阵应用于数组中的每一行
我有一个旋转矩阵,正在使用Python Numpy将旋转矩阵应用于数组中的每一行,python,arrays,numpy,matrix,rotational-matrices,Python,Arrays,Numpy,Matrix,Rotational Matrices,我有一个旋转矩阵,正在使用.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] 要对数组中的每一行执行类似的操作,,旋转矩阵.dot(line),然后将每一行添加到新数组中 不太熟悉Numpy,所
.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]
要对数组中的每一行执行类似的操作,,旋转矩阵.dot(line)
,然后将每一行添加到新数组中
不太熟悉Numpy,所以我肯定这是一个非常简单的问题,我就是不能理解。将a矩阵与旋转矩阵相乘会单独旋转所有列。只需向前转置、乘法和向后转置即可旋转所有行:
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
假设有一个3x3的旋转矩阵R,并且希望将大小为3的向量乘以数组a中的行ra,从而得到数组B中大小为3的旋转向量rb:
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)
应该做你想做的。旋转矩阵的形状是什么?您是否编写了实现该伪代码的代码?据我所知,你可以试试:
np.tensordot(旋转矩阵,输入数组,轴=(1,1))
。这在数学上是错误的,旋转是rot.dot(a)
其中a
是向量
a.dot(rot)