2017-04-06 373 views
0

我得到一个不对齐的形状错误在Python中,我不知道如何解决它。我们的目标是在数组和旋转矩阵之间取得点积。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列表。

感谢您的帮助。

回答

1

我猜你的dataset阵列是一个二维数组,不仅如此,它可能已经是一个numpy的阵列,因为你可以通过不正常的指标蟒蛇阵列[:(元组)]

因为,看来这五行

x=dataset[:,0] 
y=dataset[:,1] 
z_nodatum=dataset[:,2] 
stage=dataset[:,17] 
amp=dataset[:,5] 

实际上对应于指定列在datasetx,y,z_notatum,stageamp已经是1xN阵列。

鉴于此,该行:

x=np.array(x) 
y=np.array(y) 

什么也不做,x和y已经numpy的阵列。 z=-(z_nodatum-2919)从每个元素中减去2919,否定结果并返回生成的numpy数组,如果这实际上是您想要的。但是,z=np.array(z)再次没有做任何事情,首先你已经有了一个数量庞大的阵列。

这下一行可能也是我不认为你想要做的事情。

A = np.column_stack(([x],[y])) 

这样做是需要的1×N个阵列xy阵列,和列堆叠它们,这最终被[[x1, x2... xn, y1, y2...yn]]。什么,你可能想要的是:

A = np.column_stack((x,y)) 

返回列xy[[x1,y1],[x2, y2]...[xn,yn]]的2D numpy的阵列。需要注意的是,如果这是你打算用X做和y,你可以在开始的时候都做到了这一点:

A = dataset[:,:2] 

这将会给你摆在首位x和y一起,如果他们旁边对方dataset(取0 - > N-1列,其中n这里是2)

你的旋转矩阵似乎有效,但要注意,你可能应该通过创建它:

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]]) 

你只使用字符串格式版本时更方便(即读取tex来自其他地方)或者你有一些复杂的结构需要它。这里情况不同。

B=A*R 
在您的版本

你有一个一1x1xN NP阵列,并为R.这是一个2x2的显然行不通。

修订后的变化,我建议,你会得到一个行X列,NX2 * 2x2的操作,这是有效的,因为内部尺寸匹配。要从B中获得旋转的xy,您可以在开始时执行您正在做的操作,B现在是Nx2 numpy阵列(A * B = C,C的大小是A.rows X B.cols ,外形尺寸值):

x_rotated = B[:,0] 
y_rotated = B[:,1] 

现在一切都应该工作。尽管如此,请注意numpy中的矩阵乘法,确保至少有一个值是矩阵,否则您将进行元素乘法(您的R是矩阵)。此外,操作顺序可能会使您的公式中的两个数组(即array * array * matrix)在矩阵运算之前执行元素乘法。