将变量存储在嵌套的循环python的新维度上

发布于 2025-02-09 16:50:27 字数 2022 浏览 0 评论 0原文

我是Python的新手,试图从Matlab转移到

我正在使用for Loop读取多个.NC文件,并试图沿着新的记录维度保存它们。下面的代码部分。 Jj1的大小为4x30x30,我试图将j的数据存储在变量appn中3 e沿0 dim,因此appn是一个变量,大小为3x4x30x30。
在Matlab中很简单,但在Python中无法找到一种方法

import os, sys
import netCDF4
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from cdo import *
import xarray as xr
cdo=Cdo()

indices = ["T"]
models = ["MJ", "MK", "ML"]
seasons =["JJA", "DJF"]
period =["base", "proj"]
exp = ["ssp1", "ssp2", "ssp3"]
odir = "/outs_pytry/season/"
top ="/outs_pytry/monmean_1/"
os.makedirs(odir, exist_ok=True)
#appn=[]
appnx=[]
#pr_arr = np.zeros([models,nlat,nlon], dtype='f4')
#pr_arr = np.zeros([], dtype='f4')
j=[]    
for m in models:
        folder = "%s"%(top)
        if m in ["ML"]:
            run = "r1i1p1f2"
        else:
            run = "r1i1p1f1"
        for i in indices:
                for e in exp:
                
                  origfi1 = '%s%s_%s_%s_%s_base.nc'%(folder,i, m, e, run)
                  origfi2 = '%s%s_%s_%s_%s_proj.nc'%(folder,i, m, e, run)
                                       
                    
                  k=cdo.timselmean(3,11,9, input="%s"%origfi1, output="%s%s_%s_%s_%s_DJF_proj.nc"%(odir,i,m,e,run), returnCdf=True)
                  k1=cdo.timselmean(3,5,9, input="%s"%origfi1, output="%s%s_%s_%s_%s_JJA_proj.nc"%(odir,i,m,e,run), returnCdf=True)
                           
                  j=k.variables["T"][:]
                  
                  j1=k1.variables["T"][:]
                  
    
                  lat=k.variables["lat"]
                  lon=k.variables["lon"]
    
                  #appn=np.zeros([3,4,lon,lat], dtype='f4')
                  datain = np.array(j)

                  #Confused with how to store data in appn , so that it has a fourth dimension of size 'e'?
                  appn(e,:,:,:) =datain
                  appn.append(datain)

  

I am new to Python- trying to move from Matlab

I am reading multiple .nc files using for loop and am trying to save them along a new record dimension.A section of the code below. j and j1 has a size of 4x30x30 and I am trying to store data of j in variable appn for the 3 e along the 0th dim, such that appn is a variable with size 3x4x30x30.
It is simple in Matlab, but could not figure out a way in Python

import os, sys
import netCDF4
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from cdo import *
import xarray as xr
cdo=Cdo()

indices = ["T"]
models = ["MJ", "MK", "ML"]
seasons =["JJA", "DJF"]
period =["base", "proj"]
exp = ["ssp1", "ssp2", "ssp3"]
odir = "/outs_pytry/season/"
top ="/outs_pytry/monmean_1/"
os.makedirs(odir, exist_ok=True)
#appn=[]
appnx=[]
#pr_arr = np.zeros([models,nlat,nlon], dtype='f4')
#pr_arr = np.zeros([], dtype='f4')
j=[]    
for m in models:
        folder = "%s"%(top)
        if m in ["ML"]:
            run = "r1i1p1f2"
        else:
            run = "r1i1p1f1"
        for i in indices:
                for e in exp:
                
                  origfi1 = '%s%s_%s_%s_%s_base.nc'%(folder,i, m, e, run)
                  origfi2 = '%s%s_%s_%s_%s_proj.nc'%(folder,i, m, e, run)
                                       
                    
                  k=cdo.timselmean(3,11,9, input="%s"%origfi1, output="%s%s_%s_%s_%s_DJF_proj.nc"%(odir,i,m,e,run), returnCdf=True)
                  k1=cdo.timselmean(3,5,9, input="%s"%origfi1, output="%s%s_%s_%s_%s_JJA_proj.nc"%(odir,i,m,e,run), returnCdf=True)
                           
                  j=k.variables["T"][:]
                  
                  j1=k1.variables["T"][:]
                  
    
                  lat=k.variables["lat"]
                  lon=k.variables["lon"]
    
                  #appn=np.zeros([3,4,lon,lat], dtype='f4')
                  datain = np.array(j)

                  #Confused with how to store data in appn , so that it has a fourth dimension of size 'e'?
                  appn(e,:,:,:) =datain
                  appn.append(datain)

  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

揪着可爱 2025-02-16 16:50:27

在Python中,您可以将其附加到列表词典或列表中。如果您想将所有词典附加到appn appn appn appn,则如果限制了变量,则可以这样做:{“ e”:e,** datain}。

如果您只想附加一个要使用的值的数组:[e,*datain.values()]来创建列表,然后将其附加。我在下面举了一个例子

import os, sys
import netCDF4
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from cdo import *
import xarray as xr
cdo=Cdo()

indices = ["T"]
models = ["MJ", "MK", "ML"]
seasons =["JJA", "DJF"]
period =["base", "proj"]
exp = ["ssp1", "ssp2", "ssp3"]
odir = "/outs_pytry/season/"
top ="/outs_pytry/monmean_1/"
os.makedirs(odir, exist_ok=True)
#appn=[]
appnx=[]
#pr_arr = np.zeros([models,nlat,nlon], dtype='f4')
#pr_arr = np.zeros([], dtype='f4')
j=[]
j1=[]
appn=[]
for m in models:
    
    folder = "%s"%(top)
    if m in ["ML"]:
        run = "r1i1p1f2"
    else:
        run = "r1i1p1f1"
    for i in indices:
        for e in exp:
          origfi1 = '%s%s_%s_%s_%s_base.nc'%(folder,i, m, e, run)
          origfi2 = '%s%s_%s_%s_%s_proj.nc'%(folder,i, m, e, run)


          k=cdo.timselmean(3,11,9, input="%s"%origfi1, output="%s%s_%s_%s_%s_DJF_proj.nc"%(odir,i,m,e,run), returnCdf=True)
          k1=cdo.timselmean(3,5,9, input="%s"%origfi1, output="%s%s_%s_%s_%s_JJA_proj.nc"%(odir,i,m,e,run), returnCdf=True)

          j=k.variables["T"][:]
          j1=k1.variables["T"][:]

          lat=k.variables["lat"]
          lon=k.variables["lon"]

          #appn=np.zeros([3,4,lon,lat], dtype='f4')
          datain = np.array(j)
          appn.append({"e":e,**datain}) # appn.append([e,*datain.values()])

in python you can append to a list dictionaries or lists. if you want to append to appn a dictionary with all if detains variables, plus "e" you can do it like this: {"e":e,**datain}.

if you only want to append an array of the values to appn use: [e,*datain.values()] to create a list and then append it. I put an example below

import os, sys
import netCDF4
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from cdo import *
import xarray as xr
cdo=Cdo()

indices = ["T"]
models = ["MJ", "MK", "ML"]
seasons =["JJA", "DJF"]
period =["base", "proj"]
exp = ["ssp1", "ssp2", "ssp3"]
odir = "/outs_pytry/season/"
top ="/outs_pytry/monmean_1/"
os.makedirs(odir, exist_ok=True)
#appn=[]
appnx=[]
#pr_arr = np.zeros([models,nlat,nlon], dtype='f4')
#pr_arr = np.zeros([], dtype='f4')
j=[]
j1=[]
appn=[]
for m in models:
    
    folder = "%s"%(top)
    if m in ["ML"]:
        run = "r1i1p1f2"
    else:
        run = "r1i1p1f1"
    for i in indices:
        for e in exp:
          origfi1 = '%s%s_%s_%s_%s_base.nc'%(folder,i, m, e, run)
          origfi2 = '%s%s_%s_%s_%s_proj.nc'%(folder,i, m, e, run)


          k=cdo.timselmean(3,11,9, input="%s"%origfi1, output="%s%s_%s_%s_%s_DJF_proj.nc"%(odir,i,m,e,run), returnCdf=True)
          k1=cdo.timselmean(3,5,9, input="%s"%origfi1, output="%s%s_%s_%s_%s_JJA_proj.nc"%(odir,i,m,e,run), returnCdf=True)

          j=k.variables["T"][:]
          j1=k1.variables["T"][:]

          lat=k.variables["lat"]
          lon=k.variables["lon"]

          #appn=np.zeros([3,4,lon,lat], dtype='f4')
          datain = np.array(j)
          appn.append({"e":e,**datain}) # appn.append([e,*datain.values()])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文