创建变量创建netCDF文件时出错。

问题描述 投票:1回答:3

我能够弄清楚纬度、纬度的声明,如下面的代码所示。我想我已经接近获得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

如果你能在这里澄清一下或者给我提供一些线索来纠正它,我将感激不尽。

先谢谢你。

python netcdf
3个回答
2
投票

创建维度的方法是 没有 赋值给一个变量。只要把 lat=lon= 当定义维度时,您可以在创建变量时引用这些维度。

ds.createDimension('latitude', 161)
ds.createDimension('longitude', 321)

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

另外,当你重复使用一个变量时,要注意范围问题。lat 在脚本中多次出现。 在处理实际数据、命名的维度和维度大小时,最好使用唯一的名称。 我通常会这样做 lat_arr 的数据)。nlat 尺寸),以及 latlatitude 的维度名称。


1
投票

数据数组的大小不符合分片 "的错误说明了 precip[:]data[:,:] 不具有相同数量的项目。这时在代码中,它看起来就像 precip 应该是一个大小为161x321的变量。你是想把它分配给 data[:,:],这看起来像所有的3列信息。

我想你真正想要的是。precip[:] = data[:,2]


0
投票

我不认为这对op来说还有意义 但我尝试了以下方法: 我从我的代码中改编了op的代码,我刚刚设法让它工作(python 3.7;jupyter notebook)。

...
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))与您的 latlon.

© www.soinside.com 2019 - 2024. All rights reserved.