2016-02-26 41 views
1

我無法將CSV文件轉換爲NetCDF。我在Python中使用numpy和netCDF4來嘗試實現這一點。新陣列的總大小必須保持不變(netCDF)

錯誤:

Traceback (most recent call last): 
File "csv2nc.py", line 47, in <module> 
tmaxsfc[:] = temps 
File "netCDF4.pyx", line 3167, in netCDF4.Variable.__setitem__ (netCDF4.c:39349) 
ValueError: total size of new array must be unchanged 

腳本:

import numpy as np 
import netCDF4 

data = np.loadtxt('/home/weather/Dropbox/d0_tmaxs', delimiter=',', skiprows=0) 

temp = data[:,1] 
lat = data[:,2] 
lon = data[:,3] 

with netCDF4.Dataset('tmaxsfc.nc', mode="w", format='NETCDF4') as ds: 
# some file-level meta-data attributes: 
ds.Conventions = "CF-1.6" 
ds.title = 'Maximum Temperature values for Day 0' 
ds.institution = 'weather' 
ds.source = '' 

#print(lon.shape) 

lats = np.array(lat,np.float32).reshape(255) 
lons = np.array(lon,np.float32).reshape(255) 
temps = np.array(temp,np.float32).reshape(255) 

ds.createDimension('latitude', 255) 
ds.createDimension('longitude', 255) 

tmaxsfc = ds.createVariable('tmaxsfc', 'f4', ('latitude', 'longitude',)) 
tmaxsfc[:] = temps 
tmaxsfc.units = 'F' 
tmaxsfc.long_name = 'Temperature' 

d0_tmaxs文本文件樣本:

20160226,40,36.65408,-83.21783 
20160226,35.1508,41.00928,-74.73628 
20160226,31,43.77714,-71.75598 
20160226,23.8302,44.41944,-72.01944 
20160226,22,39.5803,-79.3394 

˚F或者它的價值,文本文件有255行。我究竟做錯了什麼?

回答

0

我在netcdf有些生疏,但不

tmaxsfc = ds.createVariable('tmaxsfc', 'f4', ('latitude', 'longitude',)) 

意味着tmaxsfc是一個2維數組,255 255?您正在以經度的緯度網格來定義它。

但它看起來像你的輸入將顯示在散點圖上,255點,每個點由緯度,經度和溫度定義。

0

所以錯誤來自temp是一個有255個元素的1D數組,但tmaxsfc變量被定義爲2D變量。你想要做的是製作一個單一維度,比如說station,所有3個一維變量都可以是以下函數:

import numpy as np 
import netCDF4 

data = np.loadtxt('/home/weather/Dropbox/d0_tmaxs', delimiter=',', skiprows=0) 

temp = np.array(data[:,1], dtype=np.float32).reshape(255) 
lat = np.array(data[:,2], dtype=np.float32).reshape(255) 
lon = np.array(data[:,3], dtype=np.float32).reshape(255) 

with netCDF4.Dataset('tmaxsfc.nc', mode="w", format='NETCDF4') as ds: 
    # some file-level meta-data attributes: 
    ds.Conventions = "CF-1.6" 
    ds.title = 'Maximum Temperature values for Day 0' 
    ds.institution = 'weather' 
    ds.source = '' 

    ds.createDimension('station', 255) 
    dims = ('station',) 

    tmaxsfc = ds.createVariable('tmaxsfc', np.float32, dims) 
    tmaxsfc[:] = temps 
    tmaxsfc.units = 'F' 
    tmaxsfc.long_name = 'Temperature' 

    lon_var = ds.createVariable('longitude', np.float32, dims) 
    lon_var[:] = lon 
    lon.units = 'degrees_east' 

    lat_var = ds.createVariable('latitude', np.float32, dims) 
    lat_var[:] = lat 
    lat.units = 'degress_north' 
相關問題