Come gestisci le serie temporali .Net?

4

Ho cercato modelli di serie temporali in SO, ma ho pensato che questo posto fosse il sito migliore per porre effettivamente la domanda.

Mi chiedo quale sia il modo "migliore" per gestire le serie temporali in .Net.

In primo luogo, definirei una serie temporale come una mappatura di% diversoDateTime con un singolo valore di tipo T .

Il valore può essere probabilmente null .

Diversi metodi dovrebbero essere disponibili in modo che le serie possano essere manipolate facilmente. Ad esempio, si desidera essere in grado di Filter dei dati (in base ai criteri sulle date e / o sui valori). Ti piacerebbe anche avere un metodo Apply , che applica una determinata funzione a tutti i valori. Idealmente, sei disposto a eseguire alcune di queste funzioni in parallelo per aumentare le prestazioni.

Diverse strutture dati implementano già tali funzionalità, ad esempio Dictionary<DateTime,T> , forse anche SortedDictionary<DateTime,T> . Tuttavia, queste sono strutture mutabili, che possono essere un problema se ci sono alcuni effetti di chiusura.

Quale modello avresti / hai usato?

Conoscete già una libreria già ampiamente utilizzata per questo argomento?

    
posta SRKX 24.12.2011 - 12:24
fonte

1 risposta

8

Quando ho implementato una classe History<T> (una lista ordinata di valori di data associati ad alcuni dati di tipo T, permettendo di far cadere i vecchi valori quando arrivava uno nuovo e si raggiungeva una dimensione massima, ecc.) L'ho fatto come classe wrapper attorno a SortedDictionary<DateTime, T> .

Poiché questa raccolta implementa IEnumerable , puoi utilizzare i metodi di estensione di LINQ per filtrare, applicare una funzione e così via. Se desideri parallelizzare queste operazioni, è PLINQ .

Se ti preoccupi della mutevole struttura della struttura, dovrai solo assicurarti che tutti gli accessi siano sincronizzati (ad es. tramite un blocco nella classe wrapper). Se aggiungi elementi alla classe solo una volta, non dovrebbe esserci nemmeno bisogno di un tale blocco, poiché la classe "diventa immutabile" se il tuo wrapper non consente di modificarlo in seguito.

    
risposta data 24.12.2011 - 12:42
fonte

Leggi altre domande sui tag