数组之间的特征行向交叉乘积

时间:2017-11-15 06:15:12

标签: c++ arrays vector eigen

我有两个Eigen::ArrayX3d个对象,即N行和3列。为了使这个具体,第一个阵列由N个粒子的3d速度组成。另一个由每个粒子位置的磁场矢量组成。我试图计算Lorentz力,v x B - 这意味着我必须取每对行并计算交叉乘积。在Python中,这意味着只需执行numpy.cross(v, B)

我试图弄清楚如何在Eigen中做到这一点并努力工作。似乎只为crossMatrix定义了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行。

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

此结果可以保存到每行的矩阵或数组中。