簡體   English   中英

創建變量以創建 netCDF 文件時出錯

[英]Error when creating variable to create a netCDF file

我能夠找出以下代碼中指示的經緯度維度聲明。 我想我已經接近獲得 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

如果您能在這里澄清一下或向我提供一些糾正它發生了什么的線索,我將不勝感激。

提前致謝,

創建維度是在分配給變量的情況下完成的。 只需在定義維度時刪除lat=lon= ,然后您就可以在創建變量時引用這些維度。

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

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

此外,在腳本中多次重復使用lat ,請注意范圍問題。 在處理實際數據、命名維度和維度大小時,最好使用唯一名稱。 我通常使用lat_arr (用於數據)、 nlat (用於維度大小)以及維度名稱的latlatitude

錯誤“數據數組的大小不符合切片”表明precip[:]data[:,:]沒有相同數量的項目。 在代碼中的那個點,看起來precip應該是一個大小為 161x321 的變量。 您正在嘗試為其分配data[:,:] ,它看起來像所有 3 列信息。

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

不要認為這仍然與 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與您的latlon具有相同的維度(即(161, 321) )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM