VTK - 如何使用vtkNetCDFCFReader在特定时间范围读取数组或变量数组

时间:2017-04-08 17:38:45

标签: vtk netcdf

我试图在netCDF文件(.nc)的特定时间范围内加载一个数组(例如,如果它有50帧或时间单位,那么得到一个对应于第二个时间帧的数组)。我目前正在使用vtkNetCDFCFReader并获取数据数组" vwnd"从第一时间框架开始:

vtkSmartPointer<vtkNetCDFCFReader> reader = vtkSmartPointer<vtkNetCDFCFReader>::New();
reader->SetFileName(path.c_str());
reader->UpdateMetaData();

vtkSmartPointer<vtkStructuredGridGeometryFilter> geometryFilter = vtkSmartPointer<vtkStructuredGridGeometryFilter>::New();
geometryFilter->SetInputConnection(reader->GetOutputPort());
geometryFilter->Update();

vtkSmartPointer<vtkPolyData> ncPolydata = vtkSmartPointer<vtkPolyData>::New();
ncPolydata = geometryFilter->GetOutput();
vtkSmartPointer<vtkDataArray> dataArray = ncPolydata->GetCellData()->GetArray("vwnd");

变量数组是:lat,lon,time,vwnd(vwnd有维度(lat,lon))。我也有兴趣获得lat和lon的数组。任何帮助将不胜感激。

提前致谢

1 个答案:

答案 0 :(得分:0)

由于lat / lon的维度与vwnd不同,因此需要2个vtknetCDFreaders来读取具有不同维度的数据。只需记住在创建阅读器后设置尺寸。

例如在C ++中:


y_hat= tf.nn.softmax (self.score_)
total_loss = tf.reduce_mean(-tf.reduce_sum(self.y_ * tf.log(y_hat), [1]))

如果你正确地做了,你可以读入任何数组并将其存储到vtkDataArray中。

如果你想在第二个时间步读入vwnd数据,只需跳过第一个lat * lon值。