meshgrid() を使用して生成された 3D 座標のセットがあります。これらを3軸で回転できるようにしたいです。
メッシュグリッドを解き、各ポイントで回転を試みましたが、メッシュグリッドが大きく、メモリが不足しています。
この質問は、einsum() を使用して 2d でこれに対処しますが、3d に拡張するときの文字列形式がわかりません。
einsum() とそのフォーマット文字列に関する他のページをいくつか読みましたが、理解できませんでした。
編集:
メッシュグリッドの軸を X、Y、Z と呼び、それぞれの形状は (213、48、37) です。また、結果をメッシュグリッドに戻そうとすると、実際のメモリ エラーが発生しました。
ポイントごとの回転を行うために「解明」しようとしたとき、次の関数を使用しました。
def mg2coords(X, Y, Z):
return np.vstack([X.ravel(), Y.ravel(), Z.ravel()]).T
次のように結果をループしました。
def rotz(angle, point):
rad = np.radians(angle)
sin = np.sin(rad)
cos = np.cos(rad)
rot = [[cos, -sin, 0],
[sin, cos, 0],
[0, 0, 1]]
return np.dot(rot, point)
回転後、ポイントを使用して補間します。