我猜你的dataset
阵列是一个二维数组,不仅如此,它可能已经是一个numpy的阵列,因为你可以通过不正常的指标蟒蛇阵列[:(元组)]
因为,看来这五行
x=dataset[:,0]
y=dataset[:,1]
z_nodatum=dataset[:,2]
stage=dataset[:,17]
amp=dataset[:,5]
实际上对应于指定列在dataset
。 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)
再次没有做任何事情,首先你已经有了一个数量庞大的阵列。
这下一行可能也是我不认为你想要做的事情。
A = np.column_stack(([x],[y]))
这样做是需要的1×N个阵列x
和y
阵列,和列堆叠它们,这最终被[[x1, x2... xn, y1, y2...yn]]
。什么,你可能想要的是:
A = np.column_stack((x,y))
返回列x
和y
[[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
中获得旋转的x
和y
,您可以在开始时执行您正在做的操作,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)在矩阵运算之前执行元素乘法。