2017-04-06 2 views
0

Pythonで整列していない形状エラーが発生しており、解決方法がわかりません。目標は、配列と回転行列の間にドット積を取ることです。Pythonローテーション行列エラー

私は2つのテキストファイルリストを呼び出して配列に変換しています。 2つのリストを配列に変換してから行列形式に正しく変換しないのですか?

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

私はあなたが経由インデックス通常のPythonの配列をすることができないので、それはおそらく既にnumpyの配列あり、そしてそれだけでなく、あなたのdataset配列は2次元配列である推測よ[:(タプル)]

これらの5つのライン

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

が実際datasetで指定された列に対応すると思われる、ことを考えると

x,y,z_notatum,stageおよびampは既に1×N配列である。このことを考えると

は、行:

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アレイxyの配列を受け取りで、列には、それらをスタック[[x1, x2... xn, y1, y2...yn]]をされて終わるいます。あなたはおそらく望んでいたことだった:カラムxy[[x1,y1],[x2, y2]...[xn,yn]]の2D numpyの配列を返します

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

。彼らはすぐ隣にいた場合

A = dataset[:,:2] 

は、これが最初の場所で一緒にあなたにxとyを与えているだろう。これがあれば、すべてのあなたが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を読む他の場所からのt)か、それを必要とする複雑な構造があります。それはここでは当てはまりません。お使いのバージョンで

B=A*R 

あなたはAのための1x1xN NP配列を持っている、と明らかにR.これについて2×2は、仕事に行くのではありません。私が提案する修正された変更により

、あなたは内側のサイズが一致するため、有効な行のx列、Nx2のの*の2x2の操作を、になるだろう。 Bのうち回転xyを取得するには、あなたが最初に何をしていた行うことができ、Bは(今この時点でNx2のnumpyの配列であるCの*のB = C、サイズがA.rows X B.colsです、外寸値):

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

すべての機能が有効になります。あなたの値の少なくとも1つが行列であることを確認してください。さもなければ、要素の賢明な乗算を行います(Rは行列です)。さらに、演算の順序によって、方程式の2つの配列(つまり配列*配列*行列)が行列演算の前に要素ごとの乗算を実行することがあります。

関連する問題