Python 读取VLEN类型的NetCDF变量,C接口
我正在寻找一些示例代码,展示如何使用C接口从NetCDF 4文件中读取可变长度数组 我有一个使用pythonPython 读取VLEN类型的NetCDF变量,C接口,python,c++,c,arrays,netcdf,Python,C++,C,Arrays,Netcdf,我正在寻找一些示例代码,展示如何使用C接口从NetCDF 4文件中读取可变长度数组 我有一个使用pythonnetCDF4库创建的文件: import netCDF4 import numpy as np def make_fire_dataset(fname, sizey=10, sizex=10): ncfile = netCDF4.Dataset(fname, mode='w', format='NETCDF4') Y = ncfile.createDimension(
netCDF4
库创建的文件:
import netCDF4
import numpy as np
def make_fire_dataset(fname, sizey=10, sizex=10):
ncfile = netCDF4.Dataset(fname, mode='w', format='NETCDF4')
Y = ncfile.createDimension('Y', sizey)
X = ncfile.createDimension('X', sizex)
fire_year_vector = ncfile.createVLType(np.int, 'fire_year_vector')
fire_years = ncfile.createVariable('fire_years', fire_year_vector, ('Y','X'))
fire_sizes = ncfile.createVariable('fire_sizes', fire_year_vector, ('Y','X'))
yr_data = np.empty(sizey * sizex, object)
sz_data = np.empty(sizey * sizex, object)
# for every (y,x) pixel, make a pair of vectors.
# one vector holds the year of fire, the other vector holds
# a number for the size, or severity of fire
for n in range(sizey * sizex):
yr_data[n] = np.array(sorted(np.random.randint(1900, 2006, np.random.randint(0,10,1))), dtype=np.int)
sz_data[n] = np.random.randint(0,100,len(yr_data[n]))
yr_data = np.reshape(yr_data,(sizey,sizex))
sz_data = np.reshape(sz_data,(sizey,sizex))
fire_years[:] = yr_data
fire_sizes[:] = sz_data
ncfile.close()
# Create the new fire file...
make_fire_dataset("new-fire-dataset.nc", sizey=10, sizex=10)
使用ncdump
签出文件:
$ ncdump -h new-fire-dataset.nc
netcdf new-fire-dataset {
types:
int64(*) fire_year_vector ;
dimensions:
Y = 10 ;
X = 10 ;
variables:
fire_year_vector fire_years(Y, X) ;
fire_year_vector fire_sizes(Y, X) ;
}
因此,10x10网格中的每个(Y,X)“像素”都有两个与像素相关联的可变长度fire\u year\u vector
s
现在,我想在我的C++程序中将单个(Y,X)点的fire_years数组和fire_size数组读入容器中。我已经阅读了这里的文档:好几次了,但我不太明白该如何操作
出于各种原因,我希望坚持使用C接口,即使我的主程序是C++。理想情况下,我从netcdf文件读取的数据将填充程序范围内某个地方的STL容器,但如果需要一点C风格的代码才能到达那里,那就好了