You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eigen中逐元素除法遇除数为0时如何将对应结果置0

Eigen逐元素除法除数为0的处理方法

直接执行c = b/a的写法会在除数a为0的位置产生inf或nan值,不符合结果为0的预期,可通过Eigen Array内置的select()条件选择方法实现需求,全程为向量化运算,无额外性能损耗。

实现逻辑

逐元素判断除数是否为0:

  • 若除数不等于0,该位置返回b/a的计算结果
  • 若除数等于0,该位置直接返回0

修正后可直接运行的代码

#include <iostream>
#include <Eigen/Dense>

using namespace Eigen;

int main()
{
  ArrayXd a(3), b(3), c;
  a << 1, 2, 0;
  b << 1.2, 3.4, 5.6;
  // 条件分支计算,避免除零
  c = (a != 0).select(b / a, 0);
  // 打印验证结果
  std::cout << c << std::endl;
  /* 输出结果:
  1.2
  1.7
  0
  */
}

注意事项

  • 条件判断部分(a != 0)的括号不能省略,否则会因C++运算符优先级问题触发语法错误
  • 如果除数是浮点类型,可根据业务精度要求将判断条件替换为阈值判断,比如a.abs() > 1e-12,避免浮点计算误差导致的极小值被误判为非零,触发异常除零结果
  • 该方法仅适用于Eigen的Array类型逐元素操作,如果是Matrix类型需要先调用.array()方法转换为Array视图再做计算。

内容的提问来源于stack exchange,提问作者Maxime Charrière

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 04:45:57