[英]does getting -nan values when multiplying two large matrices in eigen normal? and if it is how can we avoid it?
[英]Eigen sum of matrices resulting in NaN and -inf values
我在软件(C ++)中使用Eigen(Tuxfamily)遇到了一个奇怪的问题。
我正在通过为每个像素计算Hessian矩阵来分析3D体积图像。 将体积(大约800x800x600)划分为多个子体积,对于每个子体积,我将所有获得的矩阵求和,然后将它们除以数量,得到平均值(然后,我对所有平均值求和,并除以子体积以获取全部体积的平均值)。
矩阵的类型为Matrix3d。 问题是,对于大多数总和(显然也包括平均值),我得到类似以下内容:
分析元素:28215
元素合计:28215
子卷总和:
5143.76 | nan | -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;
足以修复它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.