[Python] gestione della memoria

Lorenzo Bottai bottai a lamma.rete.toscana.it
Mer 6 Giu 2012 14:44:44 CEST


Potrei postare il piccolo programma che gira solo con immagini piu' piccole e si blocca con matrici grandi, in modo che possiate vedere direttamente. Ovviamente utilizzo numpy e per la verità la definizione di matrici anche di grandi dimensioni non genera problemi il blocco avviene quando si richiama gdal e le altre. 


questo è il programmino: 





----------------------------------------------------------------------------------------------------------------------------------------------------- 
import skimage.graph as graph 
from skimage import filter 






from skimage.morphology import watershed, is_local_maximum 
from scipy import ndimage 






import os, numpy, sys, time,math,csv 
from osgeo import gdal, ogr 
from osgeo.gdalconst import * 
from math import * 






from gdalconst import * 


startTime = time.time() 




os.chdir(r'c:\Users\lorenzo\lidar2') 

gdal.AllRegister() 


# open the image 


inDs1 = gdal.Open('conv_utm2m.tif',GA_ReadOnly) 
print 'legge immagine di convergenza' 




# get image size 
rows = inDs1.RasterYSize 
cols = inDs1.RasterXSize 
bands = inDs1.RasterCount 
transform = inDs1.GetGeoTransform() 


driver = gdal.GetDriverByName('GTiff') 


outDs1 = driver.Create('conv_massimo.tif', cols, rows, 1, GDT_Int32) 
outDs2 = driver.Create('conv_chiome.tif', cols, rows, 1, GDT_Int32) 


print 'righe', rows, 'colonne', cols, 'bande', bands 


driver1 = inDs1.GetDriver() 




convergenza = numpy.ones((rows,cols),numpy.float) 
massimi =numpy.zeros((rows,cols),numpy.int) 
chiome = numpy.zeros((rows,cols),numpy.float) 




inBand1 = inDs1.GetRasterBand(1) 




print 'leggo convergenza' 


convergenza = inBand1.ReadAsArray(0,0,cols,rows).astype(numpy.float) 
print ' fatto ..' 






print ' ----- calcolo con algoritmo watershed -------' 






print ' cerco il massimo locale sulla convergenza' 
massimi = is_local_maximum(convergenza) 






print ' numero in modo progressimo i massimi' 
markers = ndimage.label(massimi)[0] 


print ' allago le pozze i bacini........' 


chiome = watershed(-convergenza, markers) 




print 'lette tutte le righe' 




outBand1 = outDs1.GetRasterBand(1) 
outBand2 = outDs2.GetRasterBand(1) 






# write the data 
outBand1.WriteArray(massimi, 0, 0) 


outBand1.FlushCache() 
stats1 = outBand1.GetStatistics(0, 1) 




outBand2.WriteArray(chiome, 0, 0) 
outBand2.FlushCache() 
stats2 = outBand2.GetStatistics(0, 1) 




outDs1.SetGeoTransform(transform) 
outDs2.SetGeoTransform(transform) 
outDs1 = None 
outDs2 = None 


inDs1 = None 


print 'script took', time.time() - startTime, 'seconds to run' 
----- Messaggio originale -----

Da: "Fabrizio Mancini" <mr.file a gmail.com> 
A: "Discussioni generali sul linguaggio Python" <python a lists.python.it> 
Inviato: Mercoledì, 6 giugno 2012 14:15:04 
Oggetto: Re: [Python] gestione della memoria 

scusa forse per l'ovvietà, ma hai già provato a dare uno sguardo a numpy? 
http://numpy.scipy.org/ 

Ciao Fabrizio 

_______________________________________________ 
Python mailing list 
Python a lists.python.it 
http://lists.python.it/mailman/listinfo/python 

-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120606/c2e94198/attachment.html>


Maggiori informazioni sulla lista Python