我的Python循环遍历DataFrame随时间减慢

2024-09-29 01:21:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我循环遍历一个非常大的数据帧(11361x22679),并使用pyplot将每行的值转换为一个像素图像。所以最后我应该有11361个图像,有151 x 151像素(我在最后加上0,使其成为正方形)。 allDF是33个数据帧的列表,对应于图像需要保存到的新文件名中的33个子目录。你知道吗

我尝试在每次迭代结束时删除每个数据帧和图像。 我试过把浮点值转换成int。 我试过了gc.收集()在每次迭代结束时(尽管我知道这是多余的) 我已经采取措施,不存储任何附加值,总是引用原始数据。你知道吗

唯一有用的是我一次处理一帧。它仍然会变慢,但因为迭代次数较少,所以速度没有那么慢。所以,我认为内部循环或其中一个函数是问题所在。你知道吗

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等等。。最终只需要几分钟就可以创建一个。你知道吗

我不知道


Tags: 数据in图像imageforcreaterangeplt
1条回答
网友
1楼 · 发布于 2024-09-29 01:21:43

你知道吗绘图。关闭('all')有很大帮助,但我改用PIL和hexadec值,这样效率更高,我能在不到20分钟内生成所有11k+图像

相关问题 更多 >