Собственная сумма матриц, приводящая к значениям NaN и -inf

У меня странная проблема с использованием 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)

2

Решение

Хорошо, используя смесь предложений, которые вы, ребята, дали мне в комментариях, я попробовал несколько случайных исправлений и решил проблему.

Когда я создавал объект Eigen :: Matrix3d, я не инициализировал значения, поэтому как-то, как только я добавлял первый OuterVector [i], эти два значения становились дикими (значение (0,1) переходило в nan и (1,2) собирался в инф). Странно, что это происходило только для этих двух конкретных значений и одинаково каждый раз.

Так происходит (во время инициализации)

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

было достаточно, чтобы это исправить.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector