Python旋转矩阵错误
我在python中遇到一个未对齐的形状错误,不知道如何解决它。目标是获取阵列和旋转矩阵之间的点积 我调用两个文本文件列表并将它们转换为数组。我没有正确地将这两个列表转换为数组,然后再转换为矩阵形式吗Python旋转矩阵错误,python,matrix,rotation,Python,Matrix,Rotation,我在python中遇到一个未对齐的形状错误,不知道如何解决它。目标是获取阵列和旋转矩阵之间的点积 我调用两个文本文件列表并将它们转换为数组。我没有正确地将这两个列表转换为数组,然后再转换为矩阵形式吗 x=dataset[:,0] y=dataset[:,1] z_nodatum=dataset[:,2] stage=dataset[:,17] amp=dataset[:,5] x=np.array(x) y=np.array(y) z=-(z_nodatum-2919) z=np.ar
x=dataset[:,0]
y=dataset[:,1]
z_nodatum=dataset[:,2]
stage=dataset[:,17]
amp=dataset[:,5]
x=np.array(x)
y=np.array(y)
z=-(z_nodatum-2919)
z=np.array(z)
A = np.column_stack(([x],[y]))
theta = np.radians(20)
c,s =np.cos(theta), np.sin(theta)
R = np.matrix('{} {};{} {}' .format(c, -s, s, c))
B=A*R
然后,我想取B并将其转换回x和y列表以进行绘图
谢谢你的帮助 我猜您的
数据集
数组是一个2D数组,不仅如此,它可能已经是一个numpy数组,因为您无法通过[:(tuple)]对普通python数组进行索引
鉴于此,这五条线
x=dataset[:,0]
y=dataset[:,1]
z_nodatum=dataset[:,2]
stage=dataset[:,17]
amp=dataset[:,5]
实际上对应于数据集中的指定列x
、y
、z_notatum
、stage
和amp
已经是1xN阵列
鉴于此,以下几行:
x=np.array(x)
y=np.array(y)
不执行任何操作,x和y已经是numpy数组z=-(z_nodatum-2919)
从每个元素中减去2919,对结果求反并返回结果numpy数组,如果这实际上是您想要的。但是同样,z=np.array(z)
没有任何作用,您首先已经有了一个numpy数组
下一行可能也是我认为你不想做的事情
A = np.column_stack(([x],[y]))
这样做的目的是将1xN数组x
和y
,列将它们堆叠起来,结果是[[x1,x2…xn,y1,y2…yn]
。你可能想要的是:
A = np.column_stack((x,y))
它返回列x
和y
[[x1,y1],[x2,y2]…[xn,yn]]
的二维numpy数组。请注意,如果这是您将要对x和y执行的全部操作,那么您可以在开始时执行此操作:
A = dataset[:,:2]
如果x和y在数据集中紧挨着(取0->n-1列,其中n为2),则首先会给出x和y
您的旋转矩阵似乎有效,但请注意,您可能应该通过以下方式创建它:
theta = np.radians(20)
cos_theta,sine_theta =np.cos(theta), np.sin(theta)
R = np.matrix([[cos_theta, -sine_theta], [sine_theta, cos_theta]])
只有当字符串格式版本更方便(即从其他地方读取文本)或者需要复杂的结构时,才能使用它。这里的情况并非如此
B=A*R
在您的版本中,a使用1xN np阵列,R使用2x2阵列。这显然行不通
根据我建议的修改,您将得到一个x行x列,Nx2*2x2操作,这是有效的,因为内部大小匹配。要从B
中获得旋转的x
和y
,您可以执行开始时所做的操作,B
此时是一个Nx2 numpy数组(a*B=C,C的大小是a.rows x B.cols,外部大小值):
现在一切都应该正常了。但在numpy中要小心矩阵乘法,确保至少有一个值是矩阵,否则将执行元素乘法(您的R
是矩阵)。此外,运算顺序可能会使方程中的两个数组(即数组*数组*矩阵)在矩阵运算之前执行元素相乘
x_rotated = B[:,0]
y_rotated = B[:,1]