2014-06-24 2 views
1

Я новичок в python и имею некоторый опыт работы с matlab. Я не получаю правильные значения для исходящего длинноволнового излучения из файла netCDF, и я попробовал модуль scipy.io.netcdf и модуль Scientific.IO.NetCDF.Проблемы с извлечением переменных из файла NetCDF в python

import Scientific.IO.NetCDF as S 
fileobj = S.NetCDFFile('filename.nc', mode='r') 
data = fileobj.variables['var'].getValue() # I tried both with and w/o the .getValue() 
print data[0:10,43,80] #first ten points in time at a specific lat/lon 
[ -5124 -5335 -5121 -5499 -5508 -8930 -10111 -9435 -8534 -8487] 

Мой код с использованием scipy.io.netcdf было то же самое, за исключением я не использовал .getValue(). Затем я пробовал это упражнение в matlab

data = ncread('filename.nc','var'); 
data[80,43,1:10] %note matlab orders the data lon, lat, time 
ans(:,:,1) = 

    275.0400 


ans(:,:,2) = 

    279.0800 


ans(:,:,3) = 

    279.6800 


ans(:,:,4) = 

    277.8700 


ans(:,:,5) = 

    275.5900 


ans(:,:,6) = 

    241.4700 


ans(:,:,7) = 

    223.1900 


ans(:,:,8) = 

    235.5700 


ans(:,:,9) = 

    239.8200 


ans(:,:,10) = 

    249.5400 

Я знаю, что значения, полученные из Matlab, верны. Эта переменная должна быть в диапазоне 80-330 (Вт на квадратный метр). Любые идеи о том, что происходит с питоном? благодаря

+0

это не должно быть 'печать данных [0: 10,42,79]' вместо этого? Индексы Python от 0, Matlab от 1. –

+0

А, да. Ты прав. Однако значения все еще находятся в диапазоне -10 000, в то время как они должны находиться в диапазоне 80-330. Сегодня я немного поработал и обнаружил, что если я использую Netcdf-пакет MATLAB 'low level', просто называемый netcdf.getVar, тогда я получаю тот же ответ, что и python. – asl

ответ

0

Попробуйте этот синтаксис:

from scipy.io.netcdf import netcdf_file as Dataset 

ncfile = Dataset('filename.nc','r') 
data = ncfile.variables['var'][:,:,:] 

 Смежные вопросы

  • Нет связанных вопросов^_^