Domanda

Attualmente sto lavorando (o almeno pianificando) un paio di progetti che funzionano con grandi quantità di dati ripetitivi.Il tipo di dati che funziona bene in un foglio di calcolo o in un database, ma è dannoso in XML.:)

NetCDF sembra un'ottima opzione per un formato di file.Tuttavia, il mio lavoro è in C# e non è disponibile alcuna implementazione NetCDF "ufficiale".Esiste una versione "ufficiale" di Python che potrei potenzialmente utilizzare con IronPython.Un'altra opzione è la "Libreria NetCDF per .Net" su CodePlex ma sembra piuttosto silenziosa (http://www.codeplex.com/netcdf).

Qualcuno ha lavorato con una di queste librerie?Potete fornire qualche consiglio?

È stato utile?

Soluzione

Innanzitutto, sei sicuro che NetCDF sia la scelta giusta?Se vuoi interagire con altri programmi che necessitano di leggere grandi quantità di dati e che supportano già NetCDF, probabilmente è un'ottima scelta.Non esistono molti formati di file standard e ben supportati che supportano array multidimensionali di grandi dimensioni.Ma se leggerai e scriverai solo file da C#, potrebbe non essere una buona scelta.

Sono un grande fan del formato file NetCDF "classico".È compatto ed estremamente semplice, ma sufficientemente flessibile da supportare molti tipi comuni di dati multidimensionali ben strutturati.Mi ci è voluto solo un giorno per scrivere un parser completo per il classico NetCDF, e ci è voluta solo un'ora per scrivere un programma per produrre un caso speciale ben formato di un classico file NetCDF.Potresti implementare tu stesso una libreria C# NetCDF pura e non sarebbe un grosso problema.Potresti facilmente iniziare implementando solo le funzionalità di cui hai bisogno. Ecco le specifiche.

Sfortunatamente, NetCDF-4 ha scelto di utilizzare HDF-5 come formato dati.Aggiunge molta complessità e rende molto più difficile scrivere un parser NetCDF completo in un'altra lingua.HDF-5 è molto versatile e, secondo me, è stato sovraingegnerizzato: cerca di essere troppe cose per troppe persone.Non consiglierei di provare a lavorarci direttamente a meno che non prevedi di dedicare un mese a scrivere test unitari.Se devi utilizzare netCDF-4 / HDF-5 da C#, l'unica opzione realistica sarebbe quella di eseguire il wrapper della libreria C utilizzando SWIG o qualcosa del genere.

Tieni presente che NetCDF per Python è solo un wrapper attorno al codice C, quindi non è poi così utile;se intendi utilizzare una libreria C con wrapper, puoi anche scrivere semplicemente un wrapper C# anziché utilizzare Python come livello intermedio.

Altri suggerimenti

Lo aggiungo ora perché questa è stata la risposta principale quando ho cercato su Google questo argomento.


ETA Secondo la risposta di seguito, è ora disponibile UN'ALTRA libreria Microsoft NetCDF:

https://www.nuget.org/packages/SDSLite

Set di dati scientifici Lite 1.4.0

Questa è una libreria multipiattaforma per manipolare file netCDF, CSV e TSV.


Poiché questa domanda è stata originariamente posta e data risposta, Microsoft ha rilasciato una libreria di set di dati scientifici che supporta NetCDF

http://research.microsoft.com/en-us/downloads/ccf905f6-34c6-4845-892e-a5715a508fa3/

descrizione del progetto

La libreria SDS semplifica agli sviluppatori .Net la lettura, la scrittura e la condivisione di scalari, vettori, matrici e griglie multidimensionali molto comuni nella modellazione scientifica.Supporta CSV, NetCDF e altri formati di file

I programmi che utilizzano la libreria memorizzano i dati correlati e i metadati associati in un pacchetto compatto autodescrittivo.Le librerie vengono fornite con una serie di utilità e pacchetti:Utilità della riga di comando sds, applicazione DataSet Viewer e un componente aggiuntivo per Microsoft Excel 2007 (e versioni successive).Vedi la pagina di rilascio per i dettagli.

E ora Microsoft ha rilasciato una nuova libreria per netCDF, disponibile tramite NuGet:

https://www.nuget.org/packages/SDSLite

Set di dati scientifici Lite 1.4.0

Questa è una libreria multipiattaforma per manipolare file netCDF, CSV e TSV.

In un progetto stiamo utilizzando l'implementazione ucar netcdf in c# utilizzando ikvm.IKVM può essere utilizzato per "convertire" progetti Java in librerie .Net senza utilizzare Java VM.Non ho eseguito alcun controllo delle prestazioni ma è un modo semplice per ottenere netcdf in C# :).

http://www.ikvm.net/stories.html

http://www.unidata.ucar.edu/downloads/netcdf/netcdf-java-4/index.jsp

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top