Печать одной переменной из файла netCDF с использованием Python

Я пытаюсь взять одну переменную из файла 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).

Любая помощь приветствуется


person KJo    schedule 23.07.2013    source источник
comment
добавление редактирования b = (rootgrp.variables['grid_optical_depth'][:,:]) из [stackoverflow.com/questions/16641437/ дал мне тот же ответ, что и раньше   -  person KJo    schedule 23.07.2013
comment
Не могли бы вы переименовать a и b в то, что вы ожидаете?   -  person    schedule 23.07.2013
comment
Я удалил A, B должен быть просто списком значений аэрозольной оптической способности. У меня они добавляются к B, потому что я не могу записать (rootgrp.variables['grid_optical_depth'][:]) непосредственно в файл   -  person KJo    schedule 23.07.2013
comment
Он считал, что гораздо проще отлаживать код, который читается как английский, а не код, в котором используются однобуквенные переменные и капитализация, чтобы что-то означать.   -  person Chris Arena    schedule 23.07.2013


Ответы (1)


Я проверил ваш код с другим файлом, и он дает ожидаемые результаты: печать переменной из файла 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.

person tiago    schedule 24.07.2013