我有两个Eigen::ArrayX3d
个对象,即N行和3列。为了使这个具体,第一个阵列由N个粒子的3d速度组成。另一个由每个粒子位置的磁场矢量组成。我试图计算Lorentz力,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;
成功应用 a x b 操作只需将1行向右移1行。
答案 0 :(得分:1)
我可以使用矩阵或数组得到结果:
MatrixX3d a(4, 3);
MatrixX3d 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;
for(int i = 0; i < a.rows(); i++){
cout << a.row(i).cross(b.row(i)) << endl;
}
使用数组:
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;
for(int i = 0; i < a.rows(); i++){
cout << a.row(i).matrix().cross(b.matrix().row(i)) << endl;
}
输出:
0 0 1
1 0 0
0 1 0
0 0 1
此结果可以保存到每行的矩阵或数组中。