Daha çox

Böyük rasterlərin NumPy-ə çevrilməsi


Məndə çox sayda raster məlumat dəsti olan bir coğrafi məlumat bazası var - dünyada hər ölkə üçün iki raster var və bunlar çox böyükdür, bəzi hallarda hər bir raster verilənlər bazası üçün 3 GB-a qədərdir.

Bunları üzərində yazdığım analitik bir proqramı işə salmaq üçün bunları NumPy massivlərinə çevirməliyəm, amma skriptim ilk raster verilənlər bazasını çevirməyə çalışarkən yaddaş səhvini vururam. Ssenari verilənlər bazasındakı bütün rasterlərin siyahısını yaradır (rasterList), sonra hər bir raster məlumat adının sonunda ölkə kodlarını götürür və bütün ölkə kodlarının yeni siyahısını doldurur. Sonra rasterListi silirəm və ölkə kodlarını təkrarlayıram, rasterləri 'GLUR _' + koduna və ya 'Pop00 _' + koduna çevirirəm. Konvertasiya edildikdən sonra hər bir rasteri yaddaşdan silirəm, amma proqram bu qədər də getmir ...

Kod:

arcpy idxal edin, arcpy-dən np kimi idxal env.workspace = "J: /Data/CISC.gdb" filepath = "J: / LIVE /" rasterList = arcpy.ListRasters ("G *") codeList = [] rasterList-də raster üçün: codeList.append (raster [5:]) del rasterListdəki kod üçün siyahı: print code inputGLUR = arcpy.Raster ("J: /Data/CISC.gdb/GLUR _" + code) lowerLeft = arcpy.Point (inputGLUR.extent.XMin, inputGLUR.extent.YMin) cellSize = inputGLUR.meanCellWidth çap "GLUR _" + kodunu, "NumPy massivinə çevirmək" arr = arcpy.RasterToNumPyArray (inputGLUR, nodata_to_value = 0). / LIVE / NumPy_GLUR ") numpy.save (" GLUR _ "+ code +". Npy ", arr) print" GLUR Converted "del inputGLUR del arr inputPop = arcpy.Raster (" J: /Data/CISC.gdb/Pop00 _ "+ code) lowerLeft = arcpy.Point (inputPop.extent.XMin, inputPop.extent.YMin) cellSize = inputPop.meanCellWidth print "Pop00 _" + code, "NumPy array-a çevrilir" arr = arcpy.RasterToNumPyArray (inputPop, nodata_) os.chdir ("J: / LIVE / NumPy_Pop") numpy.save ("Pop00 _" + code, arr) print "Population arr ay çevrildi "del inputPop del arr

və bu səhvi verir:

İzləmə (son zəng son): "J:  PYTHON  RasterToNumPy.py" faylı, sətir 21, içəridə  arr = arcpy.RasterToNumPyArray (inputGLUR, nodata_to_value = 0) Fayl "C:  Program Files (x86)  ArcGIS  Desktop10.3  ArcPy  arcpy  __ init__.py", sətir 2244, RasterToNumPyArray qayıt _RgsToN * * kwargs) MemoryError

Bu bir i7 prosessoru və 16 GB RAM olan bir kompüterdədir. Məlumat xarici diskdə saxlanılır. Bu ölçüdə rasterləri necə idarə etmək barədə hər hansı bir fikir varmı?


Bunu tapan və oxşar bir sualı olan hər kəs üçün bu sualda faydalı bir cavab tapdım.

Mənim üçün işləyən geniş raster məlumat dəstlərini geodatabase-dən .tif sənədlərinə ixrac etmək və sonra NumPy massivləri şəklində göstərmək üçün SciPy görüntü oxuyucusundan istifadə etmək idi:

scipy-dən scipy idxal misc raster = misc.imread ("myraster.tif") np.save ("myarray.npy", raster)

Bənzər bir problemə qapılan hər kəs üçün faydalı olduğunu ümid edirəm!