我有一个包含八个变量的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数据库中,以便将这些数据和站点名称匹配的几何图形连接起来,为后续的可视化做准备。
目前,我使用netCDF4模块在Python中完成了这个过程。虽然工作正常,但是很慢!现在我正在通过如下循环操作:
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。