我有一个包含八个变量的 netCDF 文件。(对不起,不能分享实际文件)每个变量都有两个维度,时间和站点。时间大约是 14 步,车站目前有 38000 个不同的 id。因此,对于 38000 个不同的“位置”(实际上只是一个 id),我们有 8 个变量和 14 个不同的时间。
$ncdump -h stationdata.nc
netcdf stationdata {
dimensions:
station = 38000 ;
name_strlen = 40 ;
time = UNLIMITED ; // (14 currently)
variables:
int time(time) ;
time:long_name = "time" ;
time:units = "seconds since 1970-01-01" ;
char station_name(station, name_strlen) ;
station_name:long_name = "station_name" ;
station_name:cf_role = "timeseries_id" ;
float var1(time, station) ;
var1:long_name = "Variable 1" ;
var1:units = "m3/s" ;
float var2(time, station) ;
var2:long_name = "Variable 2" ;
var2:units = "m3/s" ;
...
需要将此数据加载到 PostGres 数据库中,以便将数据连接到与 station_name 匹配的某些几何图形,以便以后进行可视化。
目前我已经在 Python 中使用 netCDF4 模块完成了这项工作。工作,但它需要永远!现在我像这样循环:
times = rootgrp.variables['time']
stations = rootgrp.variables['station_name']
for timeindex, time in enumerate(times):
stations = rootgrp.variables['station_name']
for stationindex, stationnamearr in enumerate(stations):
var1val = var1[timeindex][stationindex]
print "INSERT INTO ncdata (validtime, stationname, var1) \
VALUES ('%s','%s', %s);" % \
( time, stationnamearr, var1val )
这需要在我的机器上运行几分钟,我觉得它可以以更聪明的方式完成。
任何人都知道如何以更智能的方式完成此操作?最好在 Python 中。