RuntimeWarning: в ushort_scalars обнаружено недопустимое значение

Я пытаюсь сделать T2 карта из моего dicom файлы, но в моем коде возникают следующие ошибки:

RuntimeWarning: invalid value encountered in ushort_scalars
T2 map:   if math.log((I8[j][k]) / (I1[j][k])) == 0:

ExampleName.py:91: RuntimeWarning: invalid value encountered in ushort_scalars
  if (3.03 - (17.85 + 14.87)) / (math.log((I8[j][k]) / (I1[j][k]))) < 0:

ExampleName.py:93: RuntimeWarning: invalid value encountered in ushort_scalars
  elif (3.03-(17.85+14.87))/(math.log((I8[j][k]) / (I1[j][k]))) > 100:

ExampleName.py:96: RuntimeWarning: invalid value encountered in ushort_scalars
  T2_map[j,k,i] = ((3.03-(17.85+14.87))/(math.log((I8[j][k]) / (I1[j][k]))))
[[[ 0. nan nan ...  0.  0.  0.]

Вот пример кода, с которым я работаю:

#start of code snippet
T2_map = np.empty((number_of_segments, number_of_segments, number_of_segments))
for i in range(1, number_of_slices + 1):
    if 3 + (i - 1) <= number_of_segments:
        I1 = (dcm_pixel_array["array" + str(3 + (i - 1))]) * 2
    else:
        I1 = (dcm_pixel_array["array" + str(number_of_segments)]) * 2
    if 3 + ((7 * number_of_slices) + (i - 1)) <= number_of_segments:
        I8 = (dcm_pixel_array["array" + str(3 + ((7*number_of_slices) + (i-1)))]) * 2
    else:
        I8 = (dcm_pixel_array["array" + str(number_of_segments)]) * 2
    for j in range(I1.ndim):
        for k in range(I1[0].ndim):
            if math.log((I8[j][k]) / (I1[j][k])) == 0:
                T2_map[j,k,i] = "NAN"
            else:
                if (3.03 - (17.85 + 14.87)) / (math.log((I8[j][k]) / (I1[j][k]))) < 0:
                    T2_map[j,k,i] = 0
                elif (3.03-(17.85+14.87))/(math.log((I8[j][k]) / (I1[j][k]))) > 100:
                    T2_map[j,k,i] = 100
                else:
                    T2_map[j,k,i] = ((3.03-(17.85+14.87))/(math.log((I8[j][k]) / (I1[j][k]))))
#end of code snippet

Уточнение: number_of_segments = 288

Я не уверен, что означают ошибки и что делать, чтобы их исправить. Любые советы приветствуются.

Спасибо за помощь!

1 ответ

Решение

Проблема заключалась в том, что моя программа в определенный момент делилась на ноль, поэтому мне пришлось добавить оператор if, который проверял I1 и I8/I1 на нулевое значение. Если любой из них был 0, я установил T2[j,k,i] = "NAN".

Другие вопросы по тегам