我有两个Eigen::ArrayX3d对象,即N行和3列。为了使这个混凝土,第一个阵列由N粒子的三维速度组成。另一个由位于每个粒子位置的磁场矢量组成。我试图计算洛伦兹力,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的位置移到每一行的右边。
发布于 2017-11-15 22:29:18
我可以使用矩阵或数组获得结果:
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可以将此结果保存到每一行的矩阵或数组中。
https://stackoverflow.com/questions/47300576
复制相似问题