2017-05-25 92 views
0

我是netCDF庫的新用戶,所以我爲這個基本問題道了歉。 我試圖將具有4列(lon,lat,depth,velocity)的ascii文件轉換爲netCDF。我收到以下錯誤:從ASCII到NetCDF的轉換

VP [:] =文件[:,:,:,:] IndexError:數組太多指數

能否請你幫我找的原因錯誤?我已將變量的維數設置爲行數。是對的嗎?

在此先感謝。

該文件是大,你可以在這裏找到一個樣本:https://www.dropbox.com/s/qq9529vcvq8t1av/test.txt?dl=0

# -*- coding: utf-8 -*- 
from netCDF4 import Dataset 
import numpy as np 
import sys 


file = np.loadtxt('test.txt', delimiter=' ') 
# NC file setup 
mydata = Dataset('Vp.nc', 'w', format='NETCDF4') 
mydata.description = '3D VP velocity model' 

# dimensions 
mydata.createDimension('latitude', 1000) 
mydata.createDimension('longitude', 1000) 
mydata.createDimension('depth', 1000) 

Vp = mydata.createVariable('Vp', 'f4', ('latitude', 'longitude', 'depth'), fill_value=0) 

Vp[:] = file[:,:,:] 
Vp.units = 'km/s' 

回答

1

這裏有幾個問題

  • 不要使用內置函數的名稱作爲變量名,像file
  • 不要將座標數據放入變量中,而是放入單獨的變量中
  • 如果將數據添加到NetCDF變量中,切片大小爲mus T爲等於
  • 當前的誤差距離要求錯尺寸從numpy的陣列,它是在你的例子1000,4文件

這裏是工作的例子,但我沒有,因爲提取正確的變量數據我不知道實際的結構,還要小心重塑。

from netCDF4 import Dataset 
import numpy as np 
import sys 


input_file = np.loadtxt('test.txt', delimiter=' ') 
# NC file setup 
mydata = Dataset('Vp.nc', 'w', format='NETCDF4') 
mydata.description = '3D VP velocity model' 

# dimensions 
mydata.createDimension('longitude', 128) 
mydata.createDimension('latitude', 4) 
lat = mydata.createVariable('latitude', 'f4','longitude') 
lat.long_name = "latitude" 
lat.units = "degrees_north" 
lat.standard_name = "latitude" 
lon = mydata.createVariable('longitude', 'f4','latitude') 
lon.long_name = "longitude" 
lon.units = "degrees_east" 
lon.standard_name = "longitude" 

## mydata.createVariable('depth', 1) 

Vp = mydata.createVariable('Vp', 'f4', ('longitude','latitude'), fill_value=0) 

Vp[:128,:4] = input_file[:512,3].reshape(128,4) 
## lon[:] = ??? 
## lat[:] = ??? 
Vp.units = 'km/s'