У меня есть папка, содержащая подпапки (SEQ1, SEQ2, SEQ3 и т. Д.), Каждая из которых содержит 40 изображений.Заполнение dict из цикла for в Python
Я хочу выполнить цикл над каждым изображением, выполнить операцию, которая дает значение, затем получить среднее значение из 40 значений в каждой подпапке и поместить это значение в dict как «значение» с названием подпапка - это «ключ».
Вот что я пробовал:
dic = {}
for (dirname, dirnames, filenames) in os.walk('C:\Users\....'):
for keys in dirnames:
rec_3 = []
for subdirname in filenames:
ds = dicom.read_file(os.path.join(dirname, subdirname)) #reading in DICOM images
lx, ly = ds.pixel_array.shape # beginning of operation
X, Y = np.ogrid[0:lx, 0:ly]
mask = (X - lx/2)**2 + (Y - ly/2)**2 < lx*ly/8
st_dev = np.std(ds.pixel_array[mask]) # end of operation
rec_3.append(st_dev)
rec_3_avg = np.mean(rec_3)
dic.update({keys:rec_3_avg})
print dic
я получаю следующий результат "{ 'SEQ3': нан 'SEQ2': нан 'SEQ1': нан 'Seq4': нан}"
Мой идеальный результат имеет среднее значение 40 значений в каждой подпапке как значение здесь вместо «nan».
Помогите оценить очень.
Вы уверены, что '' ds.pixel_array [маска] '' не пустой массив, потому что '' np.std ([]) '' результаты в '' nan'' – Dietrich
Добавить несколько тестов результаты операций. Вы также должны повторно инициализировать переменную rec_3 до пустого списка перед циклом имен файлов. В противном случае вы вычисляете среднее значение файлов текущего каталога и всех предыдущих. – Frodon
@ Dietrich хорошая точка! он пуст, но странно, если я выполняю операцию OUTSIDE цикла «для ключей ...», это работает, т. е. ds.pixel_array [mask] не пуст. Возможно, это означает, что изображения на самом деле не читаются должным образом, что означало бы, что проблема должна лежать в цикле «для subdirname ...», фактически не повторяя изображения ... но это все еще оставляет мне вопрос о Зачем? – Foodaaaay