Python 读取VLEN类型的NetCDF变量,C接口

Python 读取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(

我正在寻找一些示例代码,展示如何使用C接口从NetCDF 4文件中读取可变长度数组

我有一个使用python
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风格的代码才能到达那里,那就好了