首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组间的特征行交叉积

数组间的特征行交叉积
EN

Stack Overflow用户
提问于 2017-11-15 06:15:12
回答 1查看 732关注 0票数 2

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

我正试图找出如何在Eigen中做到这一点,并且很难做到这一点。cross似乎只为MatrixVector定义,但将数据保留为Matrix (尽管我当然愿意接受建议)对我来说没有任何意义。

有什么合理的方法来做这个手术吗?我非常感谢你的指点。

这个设置是一个很好的例子:

代码语言:javascript
复制
   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的位置移到每一行的右边。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-15 22:29:18

我可以使用矩阵或数组获得结果:

代码语言:javascript
复制
  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;
  }

有一个数组:

代码语言:javascript
复制
  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;
  }

产出:

代码语言:javascript
复制
0 0 1
1 0 0
0 1 0
0 0 1

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47300576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档