我猜你的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)在矩陣運算之前執行元素乘法。