2016-04-01 4 views
3

Я пытаюсь научиться читать файлы .nc (netcdf) с помощью Python самым простым и быстрым способом. Я слышал, что это можно сделать с помощью трех строк кода, но я действительно не знаю, как это сделать.Прочтите файлы .nc (netcdf) с помощью python

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

Я нашел это:

from matplotlib import pyplot as plt 
import pandas as pd 
import netCDF4 
fp='uwstemp.nc' 
nc = netCDF4.Dataset(fp) 
plt.imshow(nc['Temp'][1,:,0,:]) 
plt.show() 

Он работал примерно как я хочу, но я хотел бы понять, слово за словом, что он делает. Я думаю, что «Temp» - одна из моих переменных, но я не знаю, как определить, что все мои переменные.

Специально, я не понимаю plt.imshow(nc['Temp'][1,:,0,:]) thhat [1,:, 0 ,:] Я попытался изменить его и не компилировать; но я не понимаю, что это делает и почему это число.

+1

Что такое ".nc" файл? содержит ли он текстовые или двоичные данные? – skrrgwasme

+0

Это расширение netcdf – Alessandro

+0

Содержит двоичные данные –

ответ

2

Я тоже использую MITgcm. Скажем, у вас есть выход state.nc. Прежде всего убедитесь, что вы импортировать все, что вам нужно:

from scipy.io import netcdf 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

Самый простой способ чтения данных является:

file2read = netcdf.NetCDFFile(path+'state.nc','r') 
temp = file2read.variables[var] # var can be 'Theta', 'S', 'V', 'U' etc.. 
data = temp[:]*1 
file2read.close() 

Тогда быстрый способ построить сказать слой г в момент времени Т:

plt.contourf(data[t,z,:,:]) 

Чтобы ответить на ваш вопрос, я комментировал код:

from matplotlib import pyplot as plt # import libraries 
import pandas as pd # import libraries 
import netCDF4 # import libraries 
fp='uwstemp.nc' # your file name with the eventual path 
nc = netCDF4.Dataset(fp) # reading the nc file and creating Dataset 
""" in this dataset each component will be 
in the form nt,nz,ny,nx i.e. all the variables will be flipped. """ 
plt.imshow(nc['Temp'][1,:,0,:]) 
""" imshow is a 2D plot function 
according to what I have said before this will plot the second 
iteration of the vertical slize with y = 0, one of the vertical 
boundaries of your model. """ 
plt.show() # this shows the plot 

Если вы хотите проверить различные размеры ваших данных, чтобы вы знали, что можете сделать, просто сделайте print(nc['Temp'].shape)

+0

Было бы неплохо, если бы вы могли объяснить функцию каждой линии процесса чтения данных. –

+0

Вау, я тебя люблю. В общем, я не знаю, что такое мои переменные. Как я могу выяснить, что такое мои переменные? –

+1

Я не могу использовать netcdf4 на своей машине, поэтому я не знаю, как вы это делаете. Один простой путь от bash - ncdump -h filename, который отображает все переменные в файле netcdf. С netcdf.NetCDFFile я использую вы также можете сделать print (file2read.variables.keys()), чтобы иметь список всех ваших переменных в файле. – Alessandro

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