c++ - 产生 NaN 和 -inf 值的矩阵特征和

标签 c++ math matrix nan eigen

我在我的软件(C++)中使用 Eigen (Tuxfamily) 时遇到一个奇怪的问题。

我正在通过计算每个像素的 Hessian 矩阵来分析 3D 体积图像。 体积(大约 800x800x600)被分成子体积,对于每个子体积,我将所有获得的矩阵相加,然后将它们除以数量以获得平均值(然后我做同样的总结所有平均值并除以数量子卷以获得整个卷的平均值)。

矩阵的类型为 Matrix3d。 问题是,对于大多数总和(显然也包括平均值),我得到了类似的结果:

分析的元素:28215

元素总和:28215

子卷总和:

5143.76 |楠 | -2778.05

5402.07 | 16011.9| -inf

-2778.05 | -8716.86 | 7059.32

我这样总结:

    for(int i = 0;i<(int)OuterVector.size();i++){
    AverageProduct+=OuterVector[i];
}

由于矩阵的性质,我知道它们应该在对角线上对称,因此为其中一些计算了正确的值。知道为什么其他人可能会失败吗? (并考虑到矩阵的两个位置总是相同的,给我 nan 和 -inf)

最佳答案

好的,结合了你们在评论中给我的建议,我尝试了一些随机修复,并解决了问题。

当我创建 Eigen::Matrix3d 对象时,我没有初始化这些值,因此当我添加第一个 OuterVector[i] 时,这两个值就会变得疯狂((0,1) 变得疯狂)到 nan ,(1,2) 到 inf)。奇怪的是,这种情况只发生在这两个特定值上,并且每次都以相同的方式发生。

这样做(在初始化时)

Matrix3d AverageProduct << 0,0,0,0,0,0,0,0,0;

足以修复它。

关于c++ - 产生 NaN 和 -inf 值的矩阵特征和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21046622/

相关文章:

algorithm - 动态规划中的包含 - 排除

java - 通过检查点找到穿过迷宫的最小路径

使用 R 中的条件减少列数

matrix - 尝试仅使用图像导出二维变换矩阵

c++ - 在单独的可执行文件中调用INSTANTIATE_TEST_CASE_P时,库中的TEST_P测试无法运行

c++ - 由两点组成的排序线段

java - 现代计算机上的二进制 GCD 算法与欧几里得算法

c - C 中未知的数学级数

c++ - 在类函数中访问 vector 的元素

c++ - MongoDB C++ 驱动程序服务器端查询计数