2014-09-22 24 views
0

有誰可以幫我,我讀了在MATLAB R2013b .NC(的NetCDF)文件數據。 ,我得到這樣的變量如何從多維數據NC文件數據轉換到三種格式

Variables: 
    time  
      Size:  1x1 
      Dimensions: time 
      Datatype: double 
      Attributes: 
         units = 'hours since 0001-01-01 01:00:00.0' 
         calendar = 'gregorian' 
    latitude 
      Size:  801x1 
      Dimensions: latitude 
      Datatype: single 
      Attributes: 
         units = 'degrees_north' 
    longitude 
      Size:  1501x1 
      Dimensions: longitude 
      Datatype: single 
      Attributes: 
         units = 'degrees_east' 
    DEN  
      Size:  1501x801x1 
      Dimensions: longitude,latitude,time 
      Datatype: single 
      Attributes: 
         least_significant_digit = 1 
         long_name    = 'Density' 
         units     = 'Density Index' 
    HGH  
      Size:  1501x801x1 
      Dimensions: longitude,latitude,time 
      Datatype: single 
      Attributes: 
         least_significant_digit = 1 
         long_name    = 'High level' 
         units     = 'm' 
....etc 

的,我需要的格式是這樣的:

longitude, latitude = DEN 
....  ....  ... 
....  ....  ... 
....  ....  ... 

到的所有數據。

我可以閱讀像經度或DEN的每一個變量,但如DEN和HGH有三維我不知道如何合併經度,緯度,因此在DEN或HGH中的值。

你有什麼建議,萬一如果你有在python或R解決方案請給閱讀NC文件還的方式。

在此先感謝

+0

?平均數呢? – N1B4 2014-09-22 17:55:22

+0

我並不熟悉ncdf格式,但它可能與'df <-expand.grid(lat = latitude-object,lon = longitude-object)一樣簡單。 df $ Den <-as.vector(DEN-object)'。有一個'ncdf4'包(可能)幫助導入和提取這些「對象」。 – 2014-09-22 17:56:53

+0

我認爲時間維度不算什麼。只需要經度,緯度和數值(DEN,HGH)。所以我可以用我自己的數據和其他數據來計算。 – 2014-09-22 17:56:57

回答

0

編輯:錯別字

我推薦的Python這一點。

import netCDF4 

filename = '/your/filename.nc' 

# Read in the file 
ncfile = netCDF4.Dataset(filename, 'r') 
lat = ncfile.variables['latitude'][:,0] 
lon = ncfile.variables['longitude'][:,0] 
den = ncfile.variables['DEN'][:,:,0] 

nlat, nlon = len(lat), len(lon) 
# den is now 2D 
for y in range(nlat): 
    for x in range(nlon): 
     print('Lat:{0}, Lon:{1}, DEN:{2}'.format(lat[y], lon[x], den[x,y])) 

ncfile.close() 
+0

我有錯在這裏,後NCFILE close()方法: 緯度:-15.0,經度:90.0,den0.0: 回溯(最近通話最後一個): 文件 「」,3號線,在 打印( '緯度:{0},經度:{1},書房{2}:' 格式(LAT [Y],LON [X],書房[X,Y])) IndexError:索引1是出與大小 ... – 2014-09-22 18:30:17

+0

對不起範圍爲0軸 - 只是看到你需要在零時間指數閱讀的緯度和經度變量。現在嘗試編輯的代碼。 – N1B4 2014-09-22 18:33:40

+0

文件「」,第4行 ncfile。關閉() ^ IndentationError:意外縮進 – 2014-09-22 18:42:55

0

在R,你可以很簡單地使用包裝reshapencdf這樣做(在這個例子中,因爲你沒有提供一個netCDF文件,我會用諾阿年氣溫數據集):

library(ncdf) 
download.file("ftp://ftp.cdc.noaa.gov/Datasets/ncep/air.2004.nc",destfile="air.nc") 
nc <- open.ncdf("air.nc") #Open the netcf file 
dat <- get.var.ncdf(nc,'air') #Grabbing the data, in your case replace 'air' with 'DEN' 
dat <- dat[,,1,1] #To simulate your 2D data, in your case you already have 2D data so you can skip that 
lat <- get.var.ncdf(nc,'lat') #Grabbing the latitude, in your case replace 'lat' with 'latitude' 
lon <- get.var.ncdf(nc,'lon') #Grabbing the longitude, in your case replace 'lon' with 'longitude' 

此時您的數據是具有未命名維度的矩陣。讓我們爲它們命名根據您的經度和緯度:

colnames(dat) <- lat 
rownames(dat) <- lon 

然後你要找的是什麼簡單的結果:你想用`time`尺寸做的

library(reshape) 
melt(dat) 
相關問題