2つのEigen::ArrayX3d
オブジェクトがあります。これはN行と3列です。これを具体的にするために、第1のアレイは、N個の粒子の3d速度からなる。もう1つは、各粒子の位置における磁場ベクトルからなる。私はローレンツの力、v x B
を計算しようとしています - これは私が行の各ペアを取ってクロス製品を計算しなければならないことを意味します。 Pythonでは、単にnumpy.cross(v, B)
を実行することを意味します。配列間の固有の列方向のクロス積
私はEigen
でこれを行う方法を理解しようとしています。あたかもcross
がMatrix
とVector
にのみ定義されているようですが、私のデータをMatrix
として保管することは実際には意味がありません。
この操作を実行するための合理的な方法はありますか?私はどんな指針にも非常に感謝しています。
このセットアップは良い例です::
ArrayX3d a(4,3);
ArrayX3d b(4,3);
a <<1,0,0,
0,1,0,
0,0,1,
1,0,0;
b <<0,1,0,
0,0,1,
1,0,0,
0,1,0;
X bの操作だけで、各行の右側に1位で1つのをシフトすべきの適用が成功。
'Array'は' .matrix() 'を使って行列やベクトルとして見ることができます。この方法で、クロス・プロダクト機能にアクセスできます。 – ggael
確かに、v.matrix()。cross(B.matrix())はできないので、それは本当に役に立たない。私はこれを "配列全体の間"にしようとはしていませんが、行ごとに行います。私は '.rowwise()'を使いこなそうとしましたが、うまくいきませんでした。 – Perfi