내 소프트웨어에서 Eigen (Tuxfamily)을 사용하는 데 이상한 문제가 있습니다 (C++).NaN 및 -inf 값으로 나타나는 행렬의 고유 합계
각 픽셀에 대해 헤센 (Hessian) 행렬을 계산하여 3D 볼륨 이미지를 분석합니다. 볼륨 (약 800x800x600)은 서브 볼륨으로 나뉘며 각 서브 볼륨에 대해 얻은 모든 매트릭스를 요약 한 다음 평균을 얻기 위해 양으로 나눕니다 (그리고 나서 평균을 모두 합하여 동일한 평균을 구한 다음 숫자로 나눕니다) 전체 볼륨에 대한 평균을 얻기 위해 서브 볼륨의 수).
매트릭스의 유형은 Matrix3d입니다. 문제는 그 난 같은 획득 (뿐만 아니라 평균위한 분명하고) 합 대부분 : 분석
요소 : 28,215
요소 합산 : 28,215
서브 볼륨 합계 :
5143.76 | 남 | -2778.05
5402.07 | 16011.9 | -inf
-2778.05 | -8716.86 |
for(int i = 0;i<(int)OuterVector.size();i++){
AverageProduct+=OuterVector[i];
}
때문에 나는 그들이 대각선 대칭 것을 알고 행렬의 성격에, 그래서 올바른 값은 그들 중 일부에 대해 계산됩니다 : 7059.32
나는 그들에게이 방법을 요약. 왜 다른 사람들이 실패 할 지에 대한 어떤 생각? (그리고 그것은 항상 nan과 -inf를주는 행렬의 동일한 두 위치라고 생각하십시오)
답변이 없지만 무언가가 '나노'또는 'inf'인지 확인하기위한 C++ 기능이 있습니다. ['std :: isnan()'] (http://en.cppreference.com/w/cpp/numeric/math/isnan)과 ['std :: isinf()'] (http : // en.cppreference.com/w/cpp/numeric/math/isinf)를 디버그 코드에 넣어서 어디서 왔는지 알아낼 수 있습니다. 그 점을 알고 있으면 거기에서 거꾸로 작업하여 계산을 계산할 수 있습니다 그 요소에 대해서. 일단 당신이 하나를 얻으면, 그들은 캐스 캐 이드 (cascade)하고 모든 후속 계산이'nan' 또는'inf' 결과를 생성하는 경향이 있습니다. – user1118321
디버거를 사용하여 NaN 생성을 중단 할 수 있습니다. UNIX-ish 플랫폼의 경우이 답변을 참조하십시오. http://stackoverflow.com/a/5394095/1401351 및 MSVC 용이 답변 : http://stackoverflow.com/q/4454582/1401351 – Peter
모두 모르는 사이에 말하기가 어렵습니다. 다른 것들. [Short, Self Contained, Compilable, Example] (http://sscce.org/)를 만들 수 있습니까? 생성 된 직후에 첫 번째로 깨진 행렬을 검출하고 (아마도 이전의 주석에서 'isnan'과'isinf'를 사용하여) 충분한 정밀도로 입력을 인쇄하고 그 문제를 재현하는 데 사용할 수 있는지 확인하십시오.그렇다면 문제의 원인을 이미 이해했는지 확인하십시오.이 경우 문제의 원인을 직접 해결할 수도 있습니다. 그렇지 않으면 SSCCE를 게시하면 더 자세히 살펴볼 것입니다. – MvG