PDA

View Full Version : [Python] richiesta su come organizzare i miei dati. database o che altro?


krogy80
03-04-2009, 13:42
ciao a tutti,

sono in procinto di migrare un algoritmo scritto in Matlab a Python. la ragione principale é che voglio sfruttare una certa libreria (cvxopt (http://abel.ee.ucla.edu/cvxopt/)) al posto dell'equivalente Matlab. la ragione secondaria, nonché motivo di questo topic, é la possibilitá di gestire meglio i dati prodotti.

in pratica questo algoritmo deve gestire una serie di oggetti di numero variabile. questi oggetti hanno una serie di variabili numeriche. in particolare mi interessa poter accedere efficacemente all'oggetto con il minor valore di ogni variabile.

esempio, lista di rettangoli. variabili: altezza, lunghezza. mi interessa poter accedere efficacemente sia al rettangolo piú basso sia a quello piú stretto.

potete consigliarmi che metodo utilizzare?

cdimauro
03-04-2009, 13:52
Bisogna vedere qual è l'ordine di grandezza degli elementi che manipoli, e come li manopoli.

Insomma, senza una qualche descrizione non dico dell'algoritmo, ma degli usi che fa dei numeri, è difficile cercare di consigliarti.

krogy80
03-04-2009, 14:20
Bisogna vedere qual è l'ordine di grandezza degli elementi che manipoli, e come li manopoli.

Insomma, senza una qualche descrizione non dico dell'algoritmo, ma degli usi che fa dei numeri, è difficile cercare di consigliarti.

questi oggetti rappresentano dei coni in uno spazio a n dimensioni. le variabili che mi interessano sono ordine di creazione, ampiezza angolare del cono, massima anmpiezza angolare della pareti, approssimazione superiore e inferiore del minimo di una certa funzione all'interno del cono e la loro differenza.

il numero di coni massimo dipende dal problema specifico ma potenzialmente potrebbe arrivare alle decine di migliaia se non di piú per funzioni complesse e/o dimensioni elevate dello spazio.
sostanzialmente vorrei poter gestire il maggior numero di oggetti possibile dato che non c'é limite alla complessitá del problema.

le uniche manipolazioni che mi servono sono:
-trovare quello dal valore minimo per una certa caratteristica
-eliminare tale oggetto
-crearne di nuovi e inserirli

yorkeiser
03-04-2009, 14:29
Il problema è relativo anche a dove risiede l'input del problema e se hai bisogno di un output persistente (ovvero un file o appunto una tabella) oppure ti basta stampare qualcosa a video. Comunque, se devi gestire un numero potenzialmente molto elevato di variabili, l'utilizzo di un db può sicuramente facilitarti la vita; non conosco l'interazione Python/database, ma suppongo non ci voglia molto a fare una select, una delete ed una insert

cdimauro
03-04-2009, 15:53
No, è veramente banale, infatti.

Ma dall'ordine di grandezza, posto che la dimensione n sia un numero ragionevolmente piccolo, io opterei per far stare tutto in memoria.

yorkeiser
03-04-2009, 16:07
No, è veramente banale, infatti.

Ma dall'ordine di grandezza, posto che la dimensione n sia un numero ragionevolmente piccolo, io opterei per far stare tutto in memoria.

Sì, per l'ordine di grandezza di cui si parla concordo in pieno; prenderei in considerazione l'ipotesi database solo in quanto l'utente ha scritto "potenzialmente", il che potrebbe anche voler dire che a priori l'ordine di grandezza potrebbe crescere; oppure se l'utente ne trae qualche vantaggio in termini di input (un input copioso è facile da gestire a livello tabellare) o di output, nel caso il programma dovesse salvare una grossa mole di dati. Se è solo per appoggiare le strutture temporanee, invece, il db sarebbe effettivamente eccessivo, nonchè peggiore in termini prestazionali.

krogy80
03-04-2009, 16:48
Sì, per l'ordine di grandezza di cui si parla concordo in pieno; prenderei in considerazione l'ipotesi database solo in quanto l'utente ha scritto "potenzialmente", il che potrebbe anche voler dire che a priori l'ordine di grandezza potrebbe crescere; oppure se l'utente ne trae qualche vantaggio in termini di input (un input copioso è facile da gestire a livello tabellare) o di output, nel caso il programma dovesse salvare una grossa mole di dati. Se è solo per appoggiare le strutture temporanee, invece, il db sarebbe effettivamente eccessivo, nonchè peggiore in termini prestazionali.

il numero massimo di oggetti dipende dal problema non é determinabile a priori.
la serie di oggetti non costituiscono ne input ne output ma sono solo utilizzati
internamente dall'algoritmo. salvarli per un'analisi successiva peró sarebbe utile per analizzare il comportamento dell'algoritmo.

ma l'alternativa al database quale sarebbe?
l'unica che vedo é costruire una struttura dati apposta costituita da una serie di alberi (B-tree o equivalenti) ciascuno per ogni variabile. a quel punto peró diventa difficile eliminare gli oggetti visto che bisogna eliminarli da tutti gli alberi. senza contare che dovrei implementare anche gli alberi stessi visto che non ho trovato niente in giro.

yorkeiser
03-04-2009, 17:19
Dipende da come sono fatti questi oggetti e come si referenziano l'un l'altro. Vedendo il problema dall'esterno, basterebbe creare una classe che modella il singolo oggetto (e le variabili dell'oggetto saranno quindi attributi della classe) e quindi creare un bell'array (o collection, o quel che si usa in Python) di tali oggetti.