首页 > 解决方案 > python 5 d矩阵写入nc文件

问题描述

我最近从 MATLAB 迁移到 Python。

问题是我正在从一个文件中读取一个U 变量.nc,该文件的形状是(2920 x 2 x 292 X 326)=[(365x8) x level x lat x lon] 365 天,一天是 8 次数据。

我想让他们每月平均文件有 8 个级别,我已经这样做了,所以我的矩阵现在是U_temp=[12x8x2x292x326]12 个月,8 次,经纬度和经度数据。

所以我想每年打印一个我做不到的文件U_temp.nc

我尝试了很多方法,但无法做到。由于我正在计算一个新的月份和时间维度,因此我也将其纳入。

提前谢谢了...

这是我的代码:

import netCDF4 as nc
import numpy as np
import copy
filename = 'monthly_U_'+str(i)+'.nc'
ds = nc.Dataset(filename,'w',format='NETCDF4')
#ds = nc.Dataset('new3.nc','w',format='NETCDF4') 

#print(ncfile)

### creating diminsion
month_dim= ds.createDimension('month', 12)
time_dim= ds.createDimension('time', 8)
level_dim= ds.createDimension('level', 2)
lat_dim = ds.createDimension('lat', 292)
lon_dim = ds.createDimension('lon', 326)

#### creating varaiables

month = ds.createVariable('month','f4', ('month',))
time= ds.createVariable('time','f4', ('time',))
level= ds.createVariable('level','f4', ('level',))
lat= ds.createVariable('lat','f4', ('lat',))
lon= ds.createVariable('lon','f4', ('lon',))
U=ds.createVariable('U','f4', ('month','time','level','lat','lon',))
U.units='m/s'

#### puting value

month[:]= np.arange(start=0, stop=12, step=1)
time[:]= np.arange(start=0, stop=24, step=3)
lat[:] =  np.linspace(5, 40, num=nlat)
lon[:] =  np.linspace(60, 99, num=nlon)
level[:] = [975, 1000]
U[:,:,:,:,:] = U[:,:,:,:,:]

wrtnc(file,U)

ds.close()

正确的修改代码是这样的

filename = 'monthly_U_'+str(i)+'.nc'
ds = Dataset(filename,'w',format='NETCDF4')
#ds = nc.Dataset('new3.nc','w',format='NETCDF4') 

#print(ncfile)

### creating diminsion
month_dim= ds.createDimension('month', 12)
time_dim= ds.createDimension('time', 8)
level_dim= ds.createDimension('level', 2)
lat_dim = ds.createDimension('lat', 292)
lon_dim = ds.createDimension('lon', 326)

#### creating varaiables

month = ds.createVariable('month','f4', ('month',))
time= ds.createVariable('time','f4', ('time',))
level= ds.createVariable('level','f4', ('level',))
lat= ds.createVariable('lat','f4', ('lat',))
lon= ds.createVariable('lon','f4', ('lon',))
Umean = ds.createVariable('Umean','f4',('month','time','level','lat','lon',))
Umean.units='m/s'

#### puting value

month[:]= np.linspace(1, 12, 12)
time[:]= np.linspace(0, 21, 8)
lat[:] =  np.linspace(5, 40, num=nlat)
lon[:] =  np.linspace(60, 99, num=nlon)
level[:] = [975, 1000]

Umean[:,:,:,:,:] = U[:,:,:,:,:]
#wrtnc(file,U)

ds.close()
del Umean
del U
del u

标签: python

解决方案


我认为问题发生在这里U[:,:,:,:] = U[:,:,:,:],等式的正确部分应该是一个矩阵,其中包含你想要放入 U[975, 1000]中的值level[:] = [975, 1000]。并检查wrtnc(file,U),下面的代码中没有变量file


推荐阅读