繁体   English   中英

我的数据循环中的python循环随着时间的过去而变慢

[英]My python loop through a dataframe slows down over time

我正在遍历一个非常大的数据帧(11361 x 22679),并使用pyplot将每一行的值转换为像素图像。 因此,最后我应该具有151 x 151像素的11361张图像(我在末尾加0以使其为正方形)。 allDF是33个数据帧的列表,这些数据帧对应于图像需要保存到的newFileNames中的33个子扇区。

我尝试在每次迭代结束时删除每个DataFrame和图像。 我试过将float值转换为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等,以此类推..最终只需要几分钟就可以创建一个图像。

我不知道

plot.close('all')起到了很大的作用,但是我改用了PIL和hexadec值,这效率更高,我能够在20分钟内生成所有11k +图像

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM