[Python] Algoritmo in CSV
Buongiorno, chiedo consiglio su un algoritmo da usare che sia veloce. Anche solo in meta-codice. Problema: - carico un CSV con 200 colonne e 2 milioni di righe - voglio trovare la lunghezza maggiore per ogni campo Meta-codice * apri file csv * crea un oggetto csv_reader * crea un array lunghezzamax * leggi riga per riga * fai lo split dei campi e metti nell'array campi * per ogni campo guarda la lunghezza: se lunghezza(campi[i]) lunghezza[i] allora lunghezza[i]=lunghezza(campi[i]) Ecco: il mio problema è che vengono effettuati 200*2.000.000 di IF e la cosa non mi piace molto. Qualcuno ha un consiglio per ottimizzare? Grazie in anticipo. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Algoritmo in CSV
On Thu, 2 Sep 2010 14:41:10 +0200, Vittorio Zuccala' vittorio.zucc...@gmail.com wrote: Buongiorno, chiedo consiglio su un algoritmo da usare che sia veloce. Anche solo in meta-codice. Problema: - carico un CSV con 200 colonne e 2 milioni di righe - voglio trovare la lunghezza maggiore per ogni campo Ecco: il mio problema è che vengono effettuati 200*2.000.000 di IF e la cosa non mi piace molto. La definizione del tuo problema richiede questo. Puoi trovare un idioma per abbassare qualche costante moltiplicativa, ma devi sempre fare 200*2M di confronti. Qualcuno ha un consiglio per ottimizzare? Ridefinisci il problema. Vedi se puoi lavorare con un'approssimazione del valore. Analizza solo i primi 1K record o se il file è seekabile pesca a caso qualche centinaio di record. -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Algoritmo in CSV
Il giorno gio, 02/09/2010 alle 14.41 +0200, Vittorio Zuccala' ha scritto: Buongiorno, chiedo consiglio su un algoritmo da usare che sia veloce. Anche solo in meta-codice. Problema: - carico un CSV con 200 colonne e 2 milioni di righe - voglio trovare la lunghezza maggiore per ogni campo Meta-codice * apri file csv * crea un oggetto csv_reader * crea un array lunghezzamax * leggi riga per riga * fai lo split dei campi e metti nell'array campi * per ogni campo guarda la lunghezza: se lunghezza(campi[i]) lunghezza[i] allora lunghezza[i]=lunghezza(campi[i]) Ecco: il mio problema è che vengono effettuati 200*2.000.000 di IF e la cosa non mi piace molto. Qualcuno ha un consiglio per ottimizzare? Come algoritmo in sé fatico a vedere qualcosa di migliore, per quel che riguarda il tempo (come spazio, potresti volere utilizzare, invece dell'array campi, la funzione riga.index(,) per evitare di memorizzarteli tutti). Se però per ottimizzare intendi anche spostare qualcosa da funzioni in Python al C sottostante in C, forse una leggera ottimizzazione in tempo potrebbe consistere nel * creare una lista lunghezze = [[]]*200 all'inizio, e sdoppiare l'ultimo (tuo) punto in: * per ogni campo, lunghezze[i].append( len(campi[i]) ) * ogni tot ripetizioni, fare for i in xrange(num_campi): lunghezze[i].append(lunghezzamax[i]) lunghezzamax[i] = max( lunghezze[i] ) lunghezze[i] = [] addirittura, se dello spazio occupato in memoria non te ne frega niente (e se le perfomance di cpython con le liste non si degradano al loro crescere) tot potrebbe valere 2.000.000. Ma non sarei pronto a scommettere che migliori davvero. Cioè: se succede forse è più che altro per caratteristiche di ottimizzabilità a priori del codice da parte dell'interprete, caratteristiche di cui non so nulla (se provi facci sapere, sono curioso). ciao Pietro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Algoritmo in CSV
Vittorio Zuccala' wrote: Problema: - carico un CSV con 200 colonne e 2 milioni di righe - voglio trovare la lunghezza maggiore per ogni campo [snip] Qualcuno ha un consiglio per ottimizzare? Butta tutto in un database e fai fare il lavoro sporco a lui. :-) -- Nicola Larosa - http://www.tekNico.net/ News networks giving a greater voice to viewers because the social web is so popular are like a chef on the Titanic who, seeing the looming iceberg and fleeing customers, figures ice is the future and starts making snow cones. - Randall Munroe, xkcd, June 2010 ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Algoritmo in CSV
Il giorno gio, 02/09/2010 alle 15.22 +0200, Daniele Varrazzo ha scritto: On Thu, 2 Sep 2010 14:41:10 +0200, Vittorio Zuccala' vittorio.zucc...@gmail.com wrote: Buongiorno, chiedo consiglio su un algoritmo da usare che sia veloce. Anche solo in meta-codice. Problema: - carico un CSV con 200 colonne e 2 milioni di righe - voglio trovare la lunghezza maggiore per ogni campo Ecco: il mio problema è che vengono effettuati 200*2.000.000 di IF e la cosa non mi piace molto. La definizione del tuo problema richiede questo. Puoi trovare un idioma per abbassare qualche costante moltiplicativa, ma devi sempre fare 200*2M di confronti. ... e ora che ci penso: il costo degli IF non è irrilevante rispetto al costo del calcolare la lunghezza dei campi (che nella tua formulazione è nascosto nel costo di creare gli array campi)?! ciao Pietro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python