2015-10-24 3 views
0

Моя работа сегодня - взять массив в Numpy и выгрузить его в чистый CDF-файл (.nc) с помощью Scipy. Scipy имеет специальный модуль для этого http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.io.netcdf.netcdf_file.html, но примеров создания фактического файла netcdf мало.Создание файла netcdf со Scipy?

Вот что данные должны идти в файл:

  • широтами (94)
  • долгот (192)
  • данные о температуре, соответствующей этой матрице, образованной выше

Я уже все 3 из тех, что были сохранены в Numpy, теперь мне нужно использовать Scipy (у меня также есть пакет python NETCDF4, но я не мог понять, используя это), чтобы поместить эти данные в .nc-файл.

Вот мой код до сих пор:

#testing code about difference 
f = netcdf.netcdf_file('2m air temperature difference.nc', 'w')  
f.history = 'describes the difference in 2m air temperature between the period (1992-2011) to (1961-1981)' 
f.createDimension('lons', 192)  
f.createDimension('lats', 94) 
print 'lons.size', lons.size 
print 'lats.size', lats.size 
longi = f.createVariable('lons', 'i', 192) 
lati = f.createVariable('lats', 'i', 94) 
f.createDimension('diff', difference.size) 
lons = lons[:] 
lats = lats[:] 
differ = difference[:] 
f.close() 

я получил от использования примера по умолчанию, который был предоставлен в SciPy документации, и я только заменил те части, которые были необходимы, чтобы сделать это для моих данных, все остальное такая же, как показано в этом примере.

Однако

Единственная проблема заключается в том, что по какой-то причине я получаю ошибку говорит "Type Error: 'int' object is not iterable". Однако приведенный пример использует в качестве типа данных i и не содержит каких-либо других примеров того, что можно использовать в качестве типа данных в методе createVariable() ...?

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

+0

В какую строку входит 'TypeError'? Нам не нравится гадать. Является 'lons' вашим массивом' numpy'? Почему строка 'lons = longs [:]'? – hpaulj

+0

Вы не могли понять, как использовать netcdf4? Потому что это кажется логичным выбором для использования, если вы хотите писать файлы netcdf, тем более, что вы, видимо, не можете использовать scipy для netcdf. – Evert

+0

@Evert Итак, проблема, с которой я столкнулась с пакетом netcdf4, заключалась в том, что я получил бы ошибку RunTimeError: Permission Denied. Вот мой код для этой попытки: http://pastebin.com/Du0sTdGn –

ответ

0

documentation for createVariable говорит для третьего параметра:

List of the dimension names used by the variable, in the desired order.

Таким образом, вы должны предоставить список имен измерений, не является целым числом, как 192 или 94. Например,

longi = f.createVariable('lons', 'i', ['lons']) 

кажется правильным.

+0

Спасибо за ваш ответ! Я не совсем улавливал * списки * размерной части. Я пошел дальше и внес исправления, которые вы предложили, но потом, когда я попытался прочитать файл и распечатать его, у меня были проблемы. Также я заметил, что файл составляет всего 2 КБ, тогда как большинство других .nc-файлов, которые я загрузил в Интернете, составляют около 70 КБ. Код находится в следующем комментарии из-за лимита символов. –

+0

EDIT: форматирование не получилось, вот ссылка на pastebin на код, который я использовал для создания самого файла NC. ссылка: http: // pastebin.com/PmKW0fMu –

+0

Также вот код, который содержит чтение того же файла, на который я писал, чтобы проверить, что он работает. Тем не менее, когда я попытался запустить его, я получил «Key Error: lati». Http://pastebin.com/PjCxHb9F. Я использовал пакет netCDF4 для чтения, а код был таким же, как и когда я читал два других .nc-файла, которые я использовал для создания нового. http://pastebin.com/PjCxHb9F –