Mehr

Programme/Sprachen um netcdf-Dateien „schnell“ zu verarbeiten


Ich verwende R, um Tausende von NetCDF-Dateien (verkleinerte Klimadaten) zu durchlaufen, und obwohl ich dies mit R tun kann, ist der Code zu langsam. Ich suche nach einer Möglichkeit, es zu beschleunigen und die Funktionalität zu erhalten.

Was ich brauche, ist ein Programm oder eine Plattform, auf der ich (1) Netcdf-Daten importieren, (2) einen Polygon-Layer importieren, (3) den Mittelwert für den Polygon-Layer abrufen und (4) die Ausgabe in eine CSV-Datei exportieren kann. Das Folgende ist ein allgemeiner Code-Workflow:

shape <- readOGR(dsn,"shape") ## Shapefile-Dateien einlesen <- dir("in directory", recursive=TRUE, full.names=TRUE, pattern=".nc$") ### get Dateipfade zu netCDF-Dateien out <-NULL for (i in 1:length(files)){ brick.tmp <- files[i] for (j in 1:nlayers(brick.tmp)){ val = Extract(brick. tmp[[j]],shape, fun = mean) out <- rbind(out,val) } }

Ich würde es vorziehen, in der R-Umgebung zu bleiben, aber ich bin mir nicht sicher, wie ich den Code beschleunigen kann.

Ich habe versucht, mehrere Programme zu verwenden und habe die Liste hier durchgesehen: https://www.unidata.ucar.edu/software/netcdf/docs/software.html

Ich dachte jedoch, ich würde das kollektive Wissen aller nutzen und sehen, ob ich die möglichen Entscheidungen eingrenzen kann.


NetCDF ist unglaublich allgemein und das Schreiben von langsamem Code ist einfach. Ich arbeite routinemäßig mit Zehntausenden von NetCDF-Dateien in R, wobei ich eine Kombination aus den Paketen raster, ncdf, ncdf4, RNetCDF oder rgdal verwende. Der Schlüssel besteht darin, die Zellenindexwerkzeuge im Raster zu nutzen, damit der "Zelle-in-Polygon"-Test nur einmal stattfindet und Sie dann die Extraktion auf alle Dateien anwenden können. Viele der High-Level-Tools erledigen dies für Sie, sodass es sehr einfach sein kann.

Ein Pseudo-Workflow sieht so aus:

library(raster) library(rgdal) ## eine sinnvolle Dateidatenbank aufbauen (mehr noch, erstaunlich, wie selten das gemacht wird) fs <- list.files("nctree", etc. etc.) poly <- readOGR("folder /of/polys", "shapefilename") polyMatrixVals <- Extract(stack(fs), poly, fun = mean)

Dort sind viele Annahmen geladen, aber wenn es nicht ganz passt, gibt es Möglichkeiten, den gleichen Effekt mit den Komponentenwerkzeugen in Raster zu erzielen. Ob R das richtige Werkzeug ist, hängt von den Details Ihrer Situation ab, und das gilt für jede Softwareauswahl.


Schau das Video: Tutorial of lesson 11: NetCDF (Oktober 2021).