我能够找出lat,lon维度声明,如下面的代码所示。我想我已经接近获取netCDF文件了。但是,我收到了一个错误。
import numpy as np
import netCDF4
import os
# load the data
path='C:\Users\.spyder2'
os.chdir(path)
# this load the file into a Nx3 array (three columns)
data = np.loadtxt('TRMM_1998_01_0100_newntcl.csv', delimiter=',')
# create a netcdf Data object
with netCDF4.Dataset('TEST_file.nc', mode="w", format='NETCDF4') as ds:
# some file-level meta-data attributes:
ds.Conventions = "CF-1.6"
ds.title = 'Non TC precipitation'
ds.institution = 'USU'
lat = data[:,0] # the first column
lon = data[:,1] # the second column
precip = data[:,2] # the third column
nlat = lat.reshape( (161, 321) )
nlon = lon.reshape( (161, 321) )
# time = ds.createDimension('time', 0)
ds.createDimension('latitude', 161)
ds.createDimension('longitude', 321)
precip = ds.createVariable('precip', 'f4', ('latitude', 'longitude'))
precip[:] = data[:,:]
## adds some attributes
precip.units = 'mm'
precip.long_name = 'Precipitation'
错误:
Traceback (most recent call last):
File "<ipython-input-101-483efc7d87e2>", line 42, in <module>
precip[:] = data[:,:]
File "netCDF4.pyx", line 3066, in netCDF4.Variable.__setitem__ (netCDF4.c:38720)
File "netCDF4.pyx", line 3177, in netCDF4.Variable._put (netCDF4.c:39523)
IndexError: size of data array does not conform to slice
如果您能在这里澄清一下或者向我提供一些纠正错误的线索,我感谢您。
提前致谢,
答案 0 :(得分:2)
使用 no 分配变量来创建维度。只需在定义尺寸时移除lat=
和lon=
,然后您就可以在创建变量时引用尺寸。
ds.createDimension('latitude', 161)
ds.createDimension('longitude', 321)
precip = ds.createVariable('precip, 'f4', ('latitude', 'longitude',))
此外,在脚本中多次重复使用lat
时,请注意确定范围问题。在处理实际数据,命名尺寸和尺寸大小时,最好使用唯一名称。我通常会为lat_arr
(对于数据),nlat
(对于维度大小)以及维度名称lat
或latitude
执行类似的操作。
答案 1 :(得分:1)
该错误&#34;数据数组的大小不符合切片&#34;表示precip[:]
和data[:,:]
的商品数量不同。在代码中的那一点,看起来precip
应该是大小为161x321的变量。您正在尝试分配data[:,:]
,它看起来像所有3列信息。
我认为你真正想要的是:precip[:] = data[:,2]
答案 2 :(得分:0)
不要以为这与op有关,但是我尝试了以下方法。我改编了我的op的代码,我刚刚设法开始工作(python 3.7; jupyter笔记本)。
...
lon = ds.createVariable('longitude', float, ('longitude',), zlib=True)
lat = ds.createVariable('latittude', float, ('latitude',), zlib=True)
precip = ds.createVariable('precip', float, ('latitude', 'longitude'), zlib=True)
precip[:] = data
lon[:] = lon
lat[:] = lat
...
请确保您的data
与(161, 321)
和lat
具有相同的尺寸(即lon
)。