1

我正在尝试从 netCDF 文件中获取一个变量并打印它。这是我的代码

import netCDF4
import netCDF4_utils
from netCDF4 import Dataset
from numpy.random import uniform
import csv

B = []
rootgrp = Dataset('test.cdf', 'r', format = 'NETCDF4')
f = open('testoutput.csv','wb')

b = (rootgrp.variables['grid_optical_depth'][:])
for x in b:
        B.append(x)
f.write(str(B))
rootgrp.close()
f.close()

当我运行它时,我得到了一组似乎在重复的非常大的数据,但我没有看到我的 for 循环是如何做到这一点的,它不应该只运行一次数据集吗?也有人能谈谈为什么数据以每行四组的形式打印出来吗?如果我跑,print rootgrp.variables['grid_optical_depth']我会得到

<type 'netCDF4.Variable'>
float32 grid_optical_depth(grid_time, range)
    long_name: Grid_Aerosol_Optical_Depth_Profile
    units: (n/a)
    temporal_average: 20.0
unlimited dimensions:
current shape = (1440, 399)

那么这是否意味着其中两个数字对应于 grid_time 和 rage 值?我认为情况并非如此,因为所有数字都比 1 小得多(大约为 10^-3 和 -4)。

任何帮助表示赞赏

4

1 回答 1

4

我用另一个文件测试了您的代码,它给出了预期的结果:将变量从 netCDF 文件打印到 csv 文件。它不会两次打印变量,也许这是您文件的一个特征。

您的grid_optical_depth变量的形状为(1440, 399),第一个索引对应于维度grid_time,第二个索引对应于维度range。当您执行循环for x in b:时,您将附加变量的每一列(最多 1440),每列将有 399 行。

此外,您实际上并不需要循环。如果你设置 numpy 的打印选项来显示完整的数组,你可以直接把整个数组打印成一个字符串,像这样:

import numpy as np
import netCDF4
rootgrp = netCDF4.Dataset('test.cdf', 'r', format='NETCDF4')
f = open('testoutput.csv','wb')

np.set_printoptions(threshold='nan')
f.write(str(rootgrp.variables['grid_optical_depth'][:]))
f.close()
rootgrp.close()

如果您只想将 netCDF 变量写入文本格式,那么我强烈认为您熟悉ncdump程序。

于 2013-07-24T11:43:31.337 回答