【发布时间】:2023-03-15 08:01:01
【问题描述】:
我正在尝试优化我的程序,但我无法再简化它。出现“内存错误”
关于节目:
我正在处理大量数据,并且还使用 scipy.interpolate 在最后获取数据所需的地图。并且还有最小的对象。
我的问题和尝试的解决方案:
令人惊讶的是,我的程序始终没有抛出任何“内存错误”,程序运行了 8/10 次。此外,如果我关闭环境并再次运行它,它会完美运行。所以我想我会使用 gc.collect() 之类的东西,但它没有帮助,是否有任何命令可以在程序执行时清除所有内存和变量,就像在 Matlab 中一样?我是 Python 新手。
谢谢!!
设置底图并将其缩放到兴趣点位置
m = basemap.Basemap( llcrnrlon = int(rec_long - 15), llcrnrlat = int(rec_lat - 15) ,
urcrnrlon = int(rec_long + 15), urcrnrlat = int(rec_lat + 15), projection='merc', resolution = 'l' ,
lat_0 = rec_lat , lon_0 = rec_long )
m.drawcoastlines(ax=ax)
m.drawmapboundary(fill_color='0.3')
m.fillcontinents(color='gray', lake_color='aqua', ax=ax)
parallels=numpy.linspace(-90,90,6)
m.drawparallels(parallels, labels=[1,1,1,1], fontsize=10)
meridians=numpy.linspace(-180,180,6)
m.drawmeridians(meridians, labels=[1,1,1,1], fontsize=10)
我制作网格
grid_x, grid_y = numpy.meshgrid(lx , ly)
将 IP_magnitude 插入网格(x x y 尺寸)
z = scipy.interpolate.griddata((val_rt_long, val_rt_lat), val_rt_data ,(grid_x,grid_y) ,method='nearest')
x , y = m(grid_x, grid_y)
使用 pcolormesh 绘制幅度值
m.pcolormesh(x ,y , z, cmap=plt.cm.jet)
cb = m.colorbar(location='bottom',pad='7%')
【问题讨论】:
-
你能举一个具体的你内存不足的例子吗? “令人惊讶的是,我的程序始终没有抛出任何‘内存错误’,程序运行了 8/10 次”并没有真正的帮助。您是将其作为独立脚本运行,还是在 IPython 环境中运行?
-
好问题;我所做的是重新启动内核并确保我没有运行其他内存密集型应用程序,但我想知道 Python 中是否存在“清除所有”/“cls”类型的命令。
-
“重启内核”。因此,您在 IPython 环境中运行,可能通过 IPython 笔记本。最好提一下。您最好创建一个独立的脚本并将其用于此类内存密集型计算:一旦脚本完成,操作系统将清除所有内存,您可以再次运行它而不必担心内存中剩余的数据。跨度>
-
除此之外,
del和gc.collect()可以帮助您,但我不会依赖它。 -
我从 spyder 环境运行,python 2.7 是我使用的版本,我处理的数据文件是 6.6 mbytes。我有一个主脚本,我在其中对 5 个子程序进行一般调用并设置底图并进行插值和绘图,只有在我开始长时间进行插值后,纬度跨越 30 度、30 度的表面,我才得到这个“内存错误”...... . 使用 gc.collect 没有帮助,正如我之前提到的...... del 是什么??