Я перебираю очень большой фрейм данных (11361 x 22679) и преобразую значения каждой строки в пиксельное изображение, используя pyplot.В итоге у меня должно быть 11361 изображение с 151 х 151 пикселем (я добавляю 0 в конец, чтобы сделать его квадратным).allDF - это список из 33 DataFrames, которые соответствуют 33 подкаталогам в newFileNames, в которые нужно сохранить изображения.
Я пытался удалить каждый DataFrame и изображение в конце каждой итерации.Я пытался преобразовать значения с плавающей точкой в int.Я пробовал gc.collect () в конце каждой итерации (хотя знаю, что это избыточно). Я принял меры, чтобы не сохранять никаких дополнительных значений, всегда ссылаясь на исходные данные.
Единственноеэто помогает, если я обрабатываю один кадр за раз.Он по-прежнему замедляется, но поскольку итераций меньше, он не такой медленный.Итак, я думаю, что проблема заключается во внутреннем цикле или одной из функций.
def shape_pixels(imglist):
for i in range(122):
imglist.append(0.0)
imgarr = np.array(imglist).reshape((151,151))
imgarr.reshape((151,151))
return imgarr
def create_rbg_image(subpath,imgarr,imgname):
# create/save image
img = plt.imshow(imgarr, cmap=rgbmap)
plt.axis('off')
plt.savefig(dirpath+subpath+imgname,
transparent=True,
bbox_inches=0,pad_inches=0)
for i in range(len(allDF)):
for j in range(len(allDF[i])):
fname = allDF[i]['File Name'].iloc[j][0:36]
newlist = allDF[i].iloc[j][1:].tolist()
newarr = shape_pixels(allDF[i].iloc[j][1:].tolist())
create_rbg_image(newFileNames[i]+'\\',shape_pixels(allDF[i].iloc[j][1:].tolist()),allDF[i]['File Name'].iloc[j][0:36])
Я хотел бы иметь возможность запустить код для всего набора данных и просто вернуться к нему, когда он будет сделан,но я пробежал всю ночь и прошел менее 1/3 пути.Если это продолжит замедляться, я никогда не буду готов.Первая минута генерирует более 150 изображений. Вторая генерирует 80. Затем 48, 32, 27 и т. Д., В конце концов, для создания всего одного требуется несколько минут.
Я не знаю