Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python旋转矩阵错误_Python_Matrix_Rotation - Fatal编程技术网

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

我在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.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]