У меня странная проблема с использованием Eigen (Tuxfamily) в моем программном обеспечении (на C ++).
Я анализирую трехмерное объемное изображение, вычисляя для каждого пикселя гессенскую матрицу.
Объем (около 800x800x600) делится на подобъемы, и для каждого подобъема я суммирую все полученные матрицы, а затем делю их на сумму, чтобы получить среднее значение (а затем делаю то же самое, суммируя все средние и делив их на число subvolumes для получения среднего для полного объема).
Матрицы имеют тип 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) собирался в инф). Странно, что это происходило только для этих двух конкретных значений и одинаково каждый раз.
Так происходит (во время инициализации)
Matrix3d AverageProduct << 0,0,0,0,0,0,0,0,0;
было достаточно, чтобы это исправить.
Других решений пока нет …